机器学习实战——Logistic 回归
先写写学习过程中遇到的问题:
首先在随机梯度上升算法运行过程中代码:
weights = weights + alpha * error * dataMatrix[i]出现问题
**TypeError: can’t multiply sequence by non-int of type ‘numpy.float64’**无法将序列乘以’numpy.float64’类型的非整数
主要原因:dataMatrix是list列表型,不能和float相乘,
解决办法:在函数开头将dataMatrix转化成数组类型即可dataMatrix=array(dataMatrix)
plotBestFit(weights.getA()) 其中getA()方法的作用是将矩阵型对象返回成array的数组对象,便于绘图时提取其中的数值。
最佳直线拟合公式: y = (-weights[0] - weights[1]x)/weights[2]
这里解释一下 起始拟合直线方程设为 0 = w1x1 + w2x2 + w0x0 其中x0=1,
故原方程可以变为 x2=(-w0-w1*x1)/w2
在这里解释一下为什么方程要等于0呢?
在sigmold函数中,x=0,y=0.5是临界值
代码如下:
from numpy import *
def loadDataSet():
"""解析文本"""
dataMat = []
labelMat = []
fr = open(r'E:\machine learning\machinelearninginaction\Ch05\testSet.txt')
for line in fr.readlines(): # 逐行读取
lineArr = line.strip().split()
dataMat.append([1.0,float(lineArr[0]),float(lineArr[1])])
labelMat.append(int(lineArr[2]))
return dataMat,labelMat
def sigmold(inX):
""