python预测疾病_吴裕雄--天生自然python机器学习:使用Logistic回归从疝气病症预测病马的死亡率...

,除了部分指标主观和难以测量外,该数据还存在一个问题,数据集中有

30%的值是缺失的。下面将首先介绍如何处理数据集中的数据缺失问题,然 后 再 利 用 Logistic回 归

和随机梯度上升算法来预测病马的生死。

准备数据:处理被据中的缺失值

因为有时候数据相当昂贵,扔掉和重新获取

都是不可取的,所以必须采用一些方法来解决这个问题。

下面给出了一些可选的做法:

这里选择实数0来替换所有缺失值,恰好能适用于Logistic回归。这样做的直觉在

于 ,我们需要的是一个在更新时不会影响系数的值。回归系数的更新公式如下:

使 用 Logistic

回归方法进行分类并不需要做很多工作,所需做的只是把测试集上每个特征向量乘以最优化方法

得来的回归系数,再将该乘积结果求和,最后输人到sigmoid 函数中即可0 如果对应的sigmoid值

大于0.5就预测类别标签为1,否则为0。

defclassifyVector(inX, weights):

prob= sigmoid(sum(inX*weights))if prob > 0.5:return 1.0

else:return 0.0

defcolicTest():

frTrain= open('F:\\machinelearninginaction\\Ch05\\horseColicTraining.txt')

frTest= open('F:\\machinelearninginaction\\Ch05\\horseColicTest.txt')

trainingSet=[]

trainingLabels=[]for line infrTrain.readlines():

currLine= line.strip().split('\t')

lineArr=[]for i in range(21):

lineArr.append(float(currLine[i]))

trainingSet.append(lineArr)

trainingLabels.append(float(currLine[21]))

trainWeights= stocGradAscent1(array(trainingSet), trainingLabels, 1000)

errorCount= 0; numTestVec = 0.0

for line infrTest.readlines():

numTestVec+= 1.0currLine= line.strip().split('\t')

lineArr=[]for i in range(21):

lineArr.append(float(currLine[i]))if int(classifyVector(array(lineArr), trainWeights))!= int(currLine[21]):

errorCount+= 1errorRate= (float(errorCount)/numTestVec)print("the error rate of this test is: %f" %errorRate)return errorRate

defmultiTest():

numTests= 10; errorSum=0.0

for k inrange(numTests):

errorSum+=colicTest()print("after %d iterations the average error rate is: %f" % (numTests, errorSum/float(numTests)))

multiTest()

小结:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值