Scikit-learn是一个非常知名的Python机器学习库,它广泛地用于统计分析和机器学习建模等数据科学领域。
- 建模无敌:用户通过scikit-learn能够实现各种监督和非监督学习的模型
- 功能多样:同时使用sklearn还能够进行数据的预处理、特征工程、数据集切分、模型评估等工作
- 数据丰富:内置丰富的数据集,比如:泰坦尼克、鸢尾花等,数据不再愁啦
本篇文章通过简明快要的方式来介绍scikit-learn的使用,更多详细内容请参考官网:
- 内置数据集使用
- 数据集切分
- 数据归一化和标准化
- 类型编码
- 建模6部曲
Scikit-learn使用神图
下面这张图是官网提供的,从样本量的大小开始,分为回归、分类、聚类、数据降维共4个方面总结了scikit-learn的使用:
https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html
安装
关于安装scikit-learn,建议通过使用anaconda来进行安装,不用担心各种配置和环境问题。当然也可以直接pip来安装:
1 | pip install scikit-learn |
数据集生成
sklearn内置了一些优秀的数据集,比如:Iris数据、房价数据、泰坦尼克数据等。
1 | import pandas as pd |
分类数据-iris数据
1 | # iris数据 |
iris数据到底是什么样子?每个内置的数据都存在很多的信息
可以将上面的数据生成我们想看到的DataFrame,还可以添加因变量:
回归数据-波士顿房价
我们重点关注的属性:
- data
- target、target_names
- feature_names
- filename
同样可以生成DataFrame:
三种方式生成数据
方式1
1 | #调用模块 |
方式2
1 | from sklearn import datasets |
方式3
1 | # 直接返回 |
数据集使用汇总
1 | from sklearn import datasets # 导入库 |
数据切分
1 | # 导入模块 |
数据标准化和归一化
1 | from sklearn.preprocessing import StandardScaler # 标准化 |
类型编码
来自官网案例:https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html
对数字编码
对字符串编码
建模案例
导入模块
1 | from sklearn.neighbors import KNeighborsClassifier, NeighborhoodComponentsAnalysis # 模型 |
模型实例化
1 | # 模型实例化 |
训练模型
1 | knn.fit(X_train, y_train) |
1 | KNeighborsClassifier() |
测试集预测
1 | y_pred = knn.predict(X_test) |
1 | array([0, 0, 2, 2, 1, 0, 0, 2, 2, 1, 2, 0, 1, 2, 2, 0, 2, 1, 0, 2, 1, 2, |
得分验证
模型得分验证的两种方式:
1 | knn.score(X_test,y_test) |
1 | 0.9333333333333333 |
1 | accuracy_score(y_pred,y_test) |
1 | 0.9333333333333333 |
网格搜索
如何搜索参数
1 | from sklearn.model_selection import GridSearchCV |
1 | GridSearchCV(cv=10, estimator=KNeighborsClassifier(), |
1 | # 通过搜索找到的最好参数值 |
1 | KNeighborsClassifier(n_neighbors=7) |
1 | grid_search.best_params_ |
1 | {'n_neighbors': 7} |
1 | grid_search.best_score_ |
1 | 0.975 |
基于搜索结果建模
1 | knn1 = KNeighborsClassifier(n_neighbors=7) |
1 | KNeighborsClassifier(n_neighbors=7) |
通过下面的结果可以看到:网格搜索之后的建模效果是优于未使用网格搜索的模型
1 | y_pred_1 = knn1.predict(X_test) |
1 | 1.0 |
1 | accuracy_score(y_pred_1,y_test) |
1 | 1.0 |