2.2 利用Logistic算法预测病马死亡率
由于采集数据是诸多原因,采集的数据有可能不完整。但有时候数据相当昂贵,扔掉和重新获取都是不可取的,所以必须采用一些方法来解决这个问题。
处理数据中缺失值的做法:
1> 使用可用特征的均值来填补缺失值;
2> 使用特殊值来填补缺失值;
3> 忽略有缺失值的样本;
4> 使用相似样本的均值添补缺失值;
5> 使用另外的机器学习算法预测缺失值;
对于采集到的数据进行预处理,可以使其顺利地使用分类算法。在预处理阶段做两件事:
第一,所有的缺失值必须用一个实数值来替换,因为我们使用的NumPy数据类型不允许包含缺失值。这里选择实数0来替换所有缺失值,恰好能适用于Logistic回归。这样做的直觉在于,我们需要的是一个在更新时不会影响系数的值。回归系数的更新公式如下:
weights =weights + alpha * error * dataMatrix[randIndex]
如果dataMatrix的某特征对应值为0,那么该特征的系数将不做更新,即:
weights =weights
另外,由于sigmoid(0) = 0.5,即它对结果的预测不具有任何倾向性,因此上述做法也不会对误差造成任何影响。基于上述原因,将缺失值用0代替既可以保留现有数据,也不需要对优化算法进行修改。此外,该数据集中的特征取值一般不为0,因此在某种意义上说它也满足“特征值”这个要求。
第二件事: