第十三章 Python建模库介绍
13.4 scikit-learn介绍
scikit-learn(http://scikit-learn.org)是使用最广泛且最受信任的通用Python机器学习库。它包含广泛的标准监督的和无监督的机器学习方法,包括用于模型选择和评估、数据转换、数据加载和模型持久化的工具。这些模型可用于分类、聚类、预测和其他常见任务。
示例:使用Kaggle比赛(https://www.kaggle.com/c/titanic)中关于泰坦尼克号上生还乘客的经典数据集,其中泰坦尼克号于1912年沉没。
图13-1:载入测试和训练数据集1.使用pandas载入测试和训练数据集(见图13-1)
2.检查各列,看看是否有包含缺失数据(见图13-2)
注:statsmodels和scikit-learn通常不能提供缺失数据
图13-2:检查各列3.填充、创建数组
在像这样的统计和机器学习的例子中,一个典型的任务是根据数据中的特征来预测乘客是否能幸存下来。将模型拟合到训练数据集上,然后在样本外测试数据集上进行评估。
用Age作为预测,但它缺少数据。有很多方法可以进行缺失数据插补(imputation),但我会做一个简单的插补,并使用训练数据集的中间值填充两个表中的空值(见图13-3)
然后决定一些模型变量并创建Numpy数组(见图13-3)
图13-3:填充、创建数组图13-4:创建模型实例4.使用scikit-learn的LogisticRegression模型创建一个模型实例(见图13-4)
图13-5:预测5.使用model.predict为测试数据集形成预测(见图13-5)
6.交叉验证
实际上,模型训练中经常存在许多附加的复杂层次。许多模型具有可以调整的参数,并且存在可用于参数调整的交叉验证等技术以避免过度拟合训练数据。这通常可以在新数据上产生更好的预测性能或稳健性。
交叉验证通过分割训练数据来模拟样本外预测。基于像均方误差之类的模型准确度分数,可以对模型参数执行网格搜索。一些模型,如逻辑回归,具有内置交叉验证的估计类。例如,LogisticRegressionCV类可以与一个参数一起使用,该参数表示网格搜索在模型正则化参数C上的细致度(见图13-6)
图13-6:LogisticRegressionCV类使用7.手动交叉验证
要手动进行交叉验证,可以使用cross_val_score帮助函数,该函数处理数据拆分过程。例如,为了用我们的模型与训练数据的四个非重叠分割进行交叉验证(见图13-7)
图13-7:手动交叉验证
网友评论