机器学习实战——Logistic 回归(代码实现及错误总结)

机器学习实战——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 = w1
x1 + 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):
    ""
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值