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

Python学习——Logistic Regression

2017-01-09 20:19 183 查看
逻辑回归是统计学中的经典分类方法,其模型为对数线性模型,machine learning课程中的内容以下博文可以参考,我继续按照python语言完成练习。

http://blog.csdn.net/abcjennifer/article/details/7716281

#machinelearning-Exercise2:Logistic Regression
print "Loading data...\n"
f=open('F:\machinelearning\ex2\ex2data1.txt')
#以序列获取txt文件中的数据(应该还有更简单的方式,待学习了解)
data=[]
for line in f:
data.append(map(float,line.split(",")))
#读出列表中的数据(我认为将data转化为数组或者矩阵都可以,但是前后保持一致比较方便,
#特别要清楚的知道X和y的shape.网上建议矩阵简单的情况下,一般用array替代matrix)
import numpy as np
data=np.array(data) #100*3
X=np.vstack((data[:,0],data[:,1])).T #单独的data[:,i]属于一维数组,size为100,
#没有行列区分,所以垂直叠加后要加转置
y=data[:,2] #注意此时y还是一维数组,记得变为100*1的二维数组,方便后续计算
m=len(y)
y=y.reshape(m,1)
X1=[]
X0=[]
for i in range(0,m):
if(y[i]==1):
X1.append(X[i])
else:
X0.append(X[i])
print "Plotting data with + indicating (y = 1) examples and o ' ...indicating (y = 0) examples.\n"
import matplotlib.pyplot as plt
#以下array和asmatrix等同,而且提取数据形式也一样
#X1=np.asmatrix(X1)
#X0=np.asmatrix(X0)
X1=np.array(X1)
X0=np.array(X0)
Pass,=plt.plot(X1[:,0],X1[:,1],'k+',markersize=7,linewidth=10)
Fail,=plt.plot(X0[:,0],X0[:,1],'ko',color="y",alpha=1)
plt.xlabel("Exam 1 score")
plt.ylabel("Exam 2 score")
plt.legend((Pass,Fail),("Admitted","Not Admitted"),loc='lower right')

#Part 2: Compute Cost and Gradient
[m,n]=np.shape(X)
one=np.ones((m,1))
X=np.hstack((one,X))
initial_theta=np.zeros(((n+1),1))

#定义概率密度函数
def sigmoid(z):
import math
g=[]
n=len(z)
for i in range(0,n):
g.append(1/(1+math.exp(-z[i])))
return g

#定义代价函数
def costFunction(theta,X,y):
m=len(X)
import numpy as np
import math
grad=[]
L=[]
h=sigmoid(np.dot(X,theta))#数组的点乘(100*3)*(3*1)
h=np.array(h).reshape(100,1)
n=len(h)
for i in range(0,n):
L.append(math.log(h[i]))
L=np.array(L).reshape(100,1)
J=-1*np.sum(np.dot(y.T,L)+np.dot((1-y.T),L))/m
S=(h-y)
grad=np.dot(X.T,S)/m #两个矩阵(3*100)*(100*1)
return J,grad

[cost,grad]=costFunction(initial_theta,X,y)
print 'Cost at initial theta(zeros):\n',cost
print 'Gradient at initial theta(zero):\n',grad


results:

Loading data…

Plotting data with + indicating (y = 1) examples and o ’ …indicating (y = 0) examples.

Cost at initial theta(zeros):

0.69314718056

Gradient at initial theta(zero):

[[ -0.1 ]

[-12.00921659]

[-11.26284221]]



Part 3: Optimizing using fminunc在octave中需要用到fminuc函数,但是在python中我暂时还没有发现,后续继续研究~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: