首页Python【Python数据分析】6...

【Python数据分析】69.Python建模库介绍——scikit-learn介绍


本系列文章配套代码获取有以下三种途径:

  • 可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):

https://returu.github.io/Python_Data_Analysis/lab/index.html
链接:https://pan.baidu.com/s/1MYkeYeVAIRqbxezQECHwcA?pwd=mnsj 提取码:mnsj
  • 前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Python_Data_Analysis

根据《Python for Data Analysis 3rd Edition》翻译整理

—————————————————–

scikit-learn(https://scikit-learn.org/) 是使用最广泛、最值得信赖的通用Python机器学习库之一。它包含了广泛的标准监督和无监督机器学习方法,以及用于模型选择和评估、数据转换、数据加载和模型持久化的工具。这些模型可用于分类、聚类、预测和其他常见任务。

可以使用conda安装scikit-learnconda install scikit-learn

在学习机器学习以及如何应用scikit-learn等库来解决实际问题方面,有很好的在线和图书资源。在本文中,只是简要介绍scikit-learn的API风格。近年来,scikit-learnpandas的集成已经有了很大的改进。

本文使用的数据集为Kaggle竞赛的关于1912年泰坦尼克号上生还乘客的经典数据集(https://www.kaggle.com/c/titanic) 。

在统计学和机器学习这样的例子中,一个典型的任务是根据数据中的特征来预测一个乘客是否会存活。在训练数据集(titanic_train.csv)上拟合一个模型,然后在样本外的测试数据集(titanic_test.csv)上进行评估。

1.加载数据集:

首先使用pandas分别加载训练数据集和测试数据集:

1# 加载训练数据集
2>>> train = pd.read_csv('./data/titanic_train.csv')
3
4# 加载测试数据集
5>>> test = pd.read_csv('./data/titanic_test.csv')
6
7>>> train.head(4)

2.数据预处理:

statsmodelsscikit-learn这样的库一般不能输入缺失数据,所以需要检查各列,看看是否包含缺失数据。

 1>>> train.isna().sum()
2PassengerId      0
3Survived         0
4Pclass           0
5Name             0
6Sex              0
7Age            177
8SibSp            0
9Parch            0
10Ticket           0
11Fare             0
12Cabin          687
13Embarked         2
14dtypeint64
15
16>>> test.isna().sum()
17PassengerId      0
18Pclass           0
19Name             0
20Sex              0
21Age             86
22SibSp            0
23Parch            0
24Ticket           0
25Fare             1
26Cabin          327
27Embarked         0
28dtypeint64

如果需要使用 Age 作为预测因子,但是它有缺失数据。因此首先需要进行缺失数据插补(imputation),本次仅做一个简单的插补——用训练数据集的中位数来填补空值。

1>>> impute_value = train['Age'].median()
2
3>>> train['Age'] = train['Age'].fillna(impute_value)
4
5>>> test['Age'] = test['Age'].fillna(impute_value)

然后再添加了一列 IsFemale 作为'Sex'列的编码版本。

1>>> train['IsFemale'] = (train['Sex'] == 'female').astype(int)
2
3>>> test['IsFemale'] = (test['Sex'] == 'female').astype(int)
4
5>>> train

然后决定一些模型变量并创建NumPy数组。

1>>> predictors = ['Pclass''IsFemale''Age']
2
3>>> X_train = train[predictors].to_numpy()
4
5>>> X_test = test[predictors].to_numpy()
6
7>>> y_train = train['Survived'].to_numpy()
3.创建模型:

使用scikit-learnLogisticRegression模型并创建一个模型实例(该模型仅为实例,不代表是一个合适的模型,同时前面选取的特征也不一定是最正确的)。

1>>> from sklearn.linear_model import LogisticRegression
2
3>>> model = LogisticRegression()

我们可以使用模型的 fit 方法在训练数据上拟合模型。

1>>> model.fit(X_train, y_train)

现在,我们可以使用model.predict对测试数据集进行预测。

1>>> y_predict = model.predict(X_test)
2>>> y_predict[:10]
3array([0000101010], dtype=int64)

此时,如果你有测试数据集的真实值,你可以计算出准确率百分比或其他一些误差指标。

1(y_true == y_predict).mean()

4.交叉验证法:

在实践中,许多模型都有可以调整的参数。有一些可以用来调整参数的技术(如交叉验证法)以避免对训练数据的过度拟合,这通常可以使得模型在新的数据上产生更好的预测性能或稳健性。

交叉验证的工作原理是通过分割训练数据来模拟样本外的预测,基于像均方误差这样的模型精度分数,可以对模型参数进行网格搜索。诸如逻辑回归这样的模型有内置交叉验证的估计器类。

例如,LogisticRegressionCV类可以与一个参数一起使用,该参数表示网格搜索在模型正则化参数C上的细致度。

1>>> from sklearn.linear_model import LogisticRegressionCV
2
3>>> model_cv = LogisticRegressionCV(Cs=10)
4
5>>> model_cv.fit(X_train, y_train)

如果需要手工进行交叉验证,可以使用 cross_val_score 辅助函数,它用于处理数据拆分过程。例如,为了用练数据的四个非重叠分割进行交叉验证,可以采用如下方式。

1>>> from sklearn.model_selection import cross_val_score
2
3>>> model = LogisticRegression(C=10)
4
5>>> scores = cross_val_score(model, X_train, y_train, cv=4)
6
7>>> scores
8array([0.775784750.798206280.775784750.78828829])

默认的评分指标与模型有关,但也可以选择一个明确的评分函数。交叉验证的模型需要更长的时间来训练,但往往可以产生更好的模型性能。

本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments