内容简介:作者 | Rebecca Vickery译者 | 弯月,责编 | 屠敏
作者 | Rebecca Vickery
译者 | 弯月,责编 | 屠敏
封图 | CSDN 付费下载自视觉中国
出品 | CSDN(ID:CSDNnews)
Scikit-learn是使用最广泛的 Python 机器学习库之一。它拥有标准简单的界面,可用于预处理数据以及模型的训练、优化和评估。
该项目最初始自David Cournapeau在Google Summer of Code活动中开发的项目,并于2010年首次公开发布。自创建以来,该库已发展成为了一个丰富的生态系统,可用于开发机器学习模型。
随着时间的推移,该项目发展出了许多便捷的功能,变得越来越容易使用。在本文中,我将介绍你可能不太熟悉的10个最实用的功能。
Scikit-learn拥有内置数据集
Scikit-learnAPI内置了各种实验以及真实的数据集。只需一行代码即可访问这些数据集,如果你正在学习或者想快速尝试新功能,那么这些数据集能助你一臂之力。
此外,你还可以使用生成器轻松生成合成的数据集,例如用于生成回归数据集的make_regression(),生成聚类数据集的make_blobs(),以及生成分类数据集的make_classification()。
所有数据加载函数都提供了选项,可以将数据被拆分成X(特征)和y(目标)之后再返回,这样返回值就可以直接用于训练模型。
# Toy regression data set loading from sklearn.datasets import load_boston X,y = load_boston(return_X_y = True) # Synthetic regresion data set loading from sklearn.datasets importmake_regression X,y = make_regression(n_samples=10000,noise=100, random_state=0)
很容易获取第三方公共数据集
如果你想通过Scikit-learn直接访问各种公开的数据集,有一个便捷的功能可以让你直接从openml.org网站导入数据。该网站包含21,000多种可用于机器学习项目的数据集。
from sklearn.datasets importfetch_openml X,y = fetch_openml("wine",version=1, as_frame=True, return_X_y=True)
利用已训练好的分类器来训练基准模型
在开发机器学习模型时,一般需要先创建一个基准模型。这个模型本质上是一个“笨”模型,通常它只能预测最常出现的类别。这个模型可以为你的“智能”模型提供一个基准,这样才能判断出模型的效果要优于随意选择的结果。
Scikit-learn包含一个处理分类任务的DummyClassifier()和一个处理回归问题的DummyRegressor()。
from sklearn.dummy importDummyClassifier # Fit the model on the wine dataset andreturn the model score dummy_clf =DummyClassifier(strategy="most_frequent", random_state=0) dummy_clf.fit(X, y) dummy_clf.score(X, y)
Scikit-learn拥有自己的绘图API
Scikit-learn具有内置的绘图API,所以你无需导入任何其他库即可将模型的性能显示成图表。Scikit-learn包含以下绘图工具:部分依赖图、混淆矩阵、准确率-召回率曲线以及ROC曲线。
import matplotlib.pyplot as plt from sklearn import metrics,model_selection from sklearn.ensemble importRandomForestClassifier from sklearn.datasets importload_breast_cancer X,y = load_breast_cancer(return_X_y =True) X_train, X_test, y_train, y_test =model_selection.train_test_split(X, y, random_state=0) clf =RandomForestClassifier(random_state=0) clf.fit(X_train, y_train) metrics.plot_roc_curve(clf, X_test,y_test) plt.show()
Scikit-learn拥有内置的特征选择方法
提高模型性能的技术之一是仅使用最佳特征集或通过删除冗余特征来训练模型。此过程称为特征选择。
Scikit-learn拥有许多执行特征选择的函数。例如SelectPercentile()。这个方法能够根据特定的统计方法选择得分最高的X百分位数特征。
f
rom sklearn import model_selection from sklearn.ensemble importRandomForestClassifier from sklearn.datasets import load_wine from sklearn.pipeline import Pipeline from sklearn.preprocessing importStandardScaler from sklearn.feature_selection importSelectPercentile, chi2 X,y = load_wine(return_X_y = True) X_trasformed = SelectPercentile(chi2,percentile=60).fit_transform(X, y)
通过流水线将机器学习工作流程中的所有步骤链接到一起
除了提供各种机器学习的算法之外,Scikit-learn还拥有一系列用于预处理和转换数据的功能。为了促进机器学习工作流程的可重复性和简单度, Scikit-learn创建了流水线,可将大量预处理步骤与模型训练阶段链接在一起。
流水线将工作流中的所有步骤存储为单个实体,可以通过fit和predict调用。当针对流水线对象调用fit方法时,预处理步骤和模型训练会自动执行。
from sklearn import model_selection from sklearn.ensemble import RandomForestClassifier from sklearn.datasets importload_breast_cancer from sklearn.pipeline import Pipeline from sklearn.preprocessing importStandardScaler X,y = load_breast_cancer(return_X_y =True) X_train, X_test, y_train, y_test =model_selection.train_test_split(X, y, random_state=0) # Chain together scaling the variableswith the model pipe = Pipeline([('scaler',StandardScaler()), ('rf', RandomForestClassifier())]) pipe.fit(X_train, y_train) pipe.score(X_test, y_test)
使用ColumnTransformer将不同的预处理应用到不同的特征
在许多数据集中,不同类型的特征都需要应用不同的预处理步骤。例如,对于分类数据和数字数据混合而成的数据,你可能希望通过one-hot编码将分类数据转换为数字值,并调整数字变量的比例。
Scikit-learn流水线拥有一个名叫ColumnTransformer的函数,可通过索引或列名称来指定将最合适的预处理应用到哪些列。
from sklearn import model_selection from sklearn.linear_model importLinearRegression from sklearn.datasets importfetch_openml from sklearn.compose importColumnTransformer from sklearn.pipeline import Pipeline from sklearn.impute import SimpleImputer from sklearn.preprocessing importStandardScaler, OneHotEncoder # Load auto93 data set which containsboth categorical and numeric features X,y = fetch_openml("auto93",version=1, as_frame=True, return_X_y=True) # Create lists of numeric andcategorical features numeric_features =X.select_dtypes(include=['int64', 'float64']).columns categorical_features =X.select_dtypes(include=['object']).columns X_train, X_test, y_train, y_test =model_selection.train_test_split(X, y, random_state=0) # Create a numeric and categoricaltransformer to perform preprocessing steps numeric_transformer = Pipeline(steps=[ ('imputer', SimpleImputer(strategy='median')), ('scaler', StandardScaler())]) categorical_transformer =Pipeline(steps=[ ('imputer', SimpleImputer(strategy='constant', fill_value='missing')), ('onehot', OneHotEncoder(handle_unknown='ignore'))]) # Use the ColumnTransformer to apply tothe correct features preprocessor = ColumnTransformer( transformers=[ ('num', numeric_transformer, numeric_features), ('cat', categorical_transformer, categorical_features)]) # Append regressor to the preprocessor lr = Pipeline(steps=[('preprocessor',preprocessor), ('classifier',LinearRegression())]) # Fit the complete pipeline lr.fit(X_train, y_train) print("model score: %.3f" %lr.score(X_test, y_test))
轻松输出流水线的HTML表示
通常流水线都会非常复杂,尤其是在处理实际数据时。因此,Scikit-learn提供了一种非常便捷的方法,可帮助你将流水线中的步骤输出成HTML图表。
from sklearn import set_config set_config(display='diagram') lr
将树进行可视化的绘图函数
你可以利用plot_tree()函数创建决策树模型中的步骤图。
import matplotlib.pyplot as plt from sklearn import metrics,model_selection from sklearn.tree importDecisionTreeClassifier, plot_tree from sklearn.datasets importload_breast_cancer X,y = load_breast_cancer(return_X_y =True) X_train, X_test, y_train, y_test =model_selection.train_test_split(X, y, random_state=0) clf = DecisionTreeClassifier() clf.fit(X_train, y_train) plot_tree(clf, filled=True) plt.show()
通过众多第三方库扩展Scikit-learn
有许多第三方库可与Scikit-learn结合使用,并扩展其功能。
举两个例子:
-
category-encoders库提供了各种分类特征的预处理方法:http://contrib.scikit-learn.org/category_encoders/
-
ELI5软件包提供了更好的模型可解释性:https://eli5.readthedocs.io/en/latest/
这两个软件包都可以直接在Scikit-learn流水线中使用。
# Pipeline using Weight of Evidencetransformer from category encoders from sklearn import model_selection from sklearn.linear_model importLinearRegression from sklearn.datasets importfetch_openml from sklearn.compose importColumnTransformer from sklearn.pipeline import Pipeline from sklearn.impute import SimpleImputer from sklearn.preprocessing importStandardScaler, OneHotEncoder import category_encoders as ce # Load auto93 data set which containsboth categorical and numeric features X,y = fetch_openml("auto93",version=1, as_frame=True, return_X_y=True) # Create lists of numeric andcategorical features numeric_features =X.select_dtypes(include=['int64', 'float64']).columns categorical_features =X.select_dtypes(include=['object']).columns X_train, X_test, y_train, y_test =model_selection.train_test_split(X, y, random_state=0) # Create a numeric and categoricaltransformer to perform preprocessing steps numeric_transformer = Pipeline(steps=[ ('imputer', SimpleImputer(strategy='median')), ('scaler', StandardScaler())]) categorical_transformer =Pipeline(steps=[ ('imputer', SimpleImputer(strategy='constant', fill_value='missing')), ('woe', ce.woe.WOEEncoder())]) # Use the ColumnTransformer to apply tothe correct features preprocessor = ColumnTransformer( transformers=[ ('num', numeric_transformer, numeric_features), ('cat', categorical_transformer, categorical_features)]) # Append regressor to the preprocessor lr = Pipeline(steps=[('preprocessor',preprocessor), ('classifier',LinearRegression())]) # Fit the complete pipeline lr.fit(X_train, y_train) print("model score: %.3f" %lr.score(X_test, y_test))
感谢您的阅读!
原文:https://towardsdatascience.com/10-things-you-didnt-know-about-scikit-learn-cccc94c50e4f
本文为 CSDN 翻译,转载请注明来源出处。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Go语言实现本地脚本功能,带服务器功能
- 禅道 9.8.stable 发布,增强待办功能和消息通知功能
- MySQL实现排名并查询指定用户排名功能,并列排名功能
- imi v1.0.4 发布,多个功能组件功能增强和优化
- GitLab 11.11 发布,增强协作性功能以及 DevOps 功能
- GitLab 11.11 发布,增强协作性功能以及 DevOps 功能
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Flash PHP实用开发技术
Steve Webster著、王黎译 / 王黎 / 清华大学出版社 / 2002-3 / 39.00元
本书将介绍服务器端脚本所提供的各种可能的操作方案,帮助读者掌握设计数据库集成程序和高端应用程序的知识。一起来看看 《Flash PHP实用开发技术》 这本书的介绍吧!