Python学习——Logistic Regression
2017-01-09 20:19
183 查看
逻辑回归是统计学中的经典分类方法,其模型为对数线性模型,machine learning课程中的内容以下博文可以参考,我继续按照python语言完成练习。
http://blog.csdn.net/abcjennifer/article/details/7716281
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]]
![](https://img-blog.csdn.net/20170109201638410?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM2OTI2OTM3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
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中我暂时还没有发现,后续继续研究~~
相关文章推荐
- 想继续用IronPython写点程序,不过得先学习python了
- Python是近期学习的主要内容。
- 学习Python知识小结 杂记二
- 使用minidom来处理XML的示例(Python 学习)(转载)
- 开始学习python
- Python学习笔记
- Python学习
- python 与 ruby (ruby学习资源大全)
- Python 学习小记:Python Tutorial
- python学习足迹(1)
- 学习Python序言
- 我学习python的体会
- 学习Python第一天 杂记一
- 今天开始在这里写学习Python、应用Python的学习笔记
- python学习足迹(2)
- Python学习足迹(4)(入门篇终结)
- 新的学习:从Python开始
- 贴几个python学习的link
- 学习Python语言必备的资源[转]
- 从现在开始要学习Python了