您的位置:首页 > 编程语言 > Python开发

python实战:逻辑回归实现二分类

2018-03-10 14:10 281 查看
from numpy import*
import matplotlib.pyplot as plt

def sigmoid(inX):
return 1.0/(1+exp(-inX))

def loadDataSet(path):
dataMat=[]
labelmat=[]
fr=open(path)
for line in fr.readlines():
a=float(line.strip().split()[0])
b=float(line.strip().split()[1])
c=int(line.strip().split()[2])
dataMat.append([a,b,1])
labelmat.append(c)
fr.close()
return dataMat,labelmat

def trainDataSet(dataMat,labelMat):
alpha=0.001
k=500
dataMat_Vector=mat(dataMat)
labelMat_Vector=mat(labelMat)
num_Lines,num_Features=shape(dataMat_Vector)
dataMat_T=dataMat_Vector.transpose()
labelMat_T=labelMat_Vector.transpose()
weight=ones((num_Features,1))
print("dataMat_Vector:%s,%s"%shape(dataMat_Vector))
print("weight:%s,%s"%shape(weight))
for i in range(k):
error=labelMat_T - sigmoid(dataMat_Vector * weight)
weight=weight+alpha*dataMat_T*(error)
#print(weight)
return weight

path='/Users/wangyouzhuo/Desktop/testSet.txt'

dataMat,labelmat=loadDataSet(path)
weight=trainDataSet(dataMat,labelmat)

x_green=[]
x_red=[]
y_green=[]
y_red=[]

fig = plt.figure()
ax = fig.add_subplot(111)

for i in range(len(dataMat)):
if int(labelmat[i])==0:
x_green.append(float(dataMat[i][0]))
y_green.append(float(dataMat[i][1]))
else:
x_red.append(float(dataMat[i][0]))
y_red.append(float(dataMat[i][1]))

a=arange(-5.0,5.0,0.1)
a=list(a)
b=-(weight[2][0]/weight[1][0])-((weight[0][0]/weight[1][0])*a)
b=array(b)
b=b.tolist()
ax.scatter(x_green,y_green,color='green')
ax.scatter(x_red,y_red,color='red')
ax.plot(a,b[0])
plt.xlabel('x')
plt.ylabel('y')
plt.show()

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: