Scikit-Learn 学得如何?程序员不容错过十大实用功能来袭
作者 | 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_bostonX,y = load_boston(return_X_y = True)# Synthetic regresion data set loading
from sklearn.datasets importmake_regressionX,y = make_regression(n_samples=10000,noise=100, random_state=0)
很容易获取第三方公共数据集
如果你想通过Scikit-learn直接访问各种公开的数据集,有一个便捷的功能可以让你直接从openml.org网站导入数据。该网站包含21,000多种可用于机器学习项目的数据集。
from sklearn.datasets importfetch_openmlX,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_cancerX,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百分位数特征。
from 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, chi2X,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 importStandardScalerX,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']).columnsX_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_configset_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_cancerX,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 encodersfrom 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']).columnsX_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 翻译,转载请注明来源出处。
更多精彩推荐
☞由 Apache 说开,中国开源项目已经走向世界!
☞程序员饭碗不保了?GPT-3 最强应用发布,动动手指就自动写代码的神器来了!
☞再见 Python,Hello Julia!
☞万亿美元软件浪潮来临,开发者是核心!
☞台积电9月14日断供华为:中国“芯”的坎坷之路
☞员工导致Twitter陷入史诗级加密黑客风暴?官方回应来了
点分享点点赞点在看
Scikit-Learn 学得如何?程序员不容错过十大实用功能来袭相关推荐
- 刚学编程的程序员必备这5大编程网站,你知道几个?
一个好的网站,就是程序员学编程的基地. 虽说新手程序员也许知道一些在线编程网站,但是质量上乘的编程网站又知道几个呢? 下面就来给大家推荐5个质量上乘的编程网站: 0.Leetcode LeetCode ...
- 刚学编程的程序员必备这5大编程网站,你知道几个? 1
一个好的网站,就是程序员学编程的基地. 虽说新手程序员也许知道一些在线编程网站,但是质量上乘的编程网站又知道几个呢? 下面就来给大家推荐5个质量上乘的编程网站: 0.Leetcode LeetCode ...
- 程序员必玩:盘点程序员不容错过的手机游戏
点击上面 免费订阅本账号! 本公众号主要推送javaweb开发相关技术,基础知识点,同时会深入剖析复杂的问题,分享一些优秀的框架,大型项目经验,当今最流行的Javaweb技术,热点科技新闻,招聘信息, ...
- 程序员必备的十大职业生存技巧,收藏保命!
如果你想在众多程序员中脱颖而出,下面这个现象是值得你深思的:随着敏捷开发.开发运营和分布式版本控制系统的愈渐流行,开发的重心逐渐从个人能力向小组合作转移. 在大多数情况下,团队.部门和个人会自行解决问 ...
- 只有程序员才有的十大烦恼
10. 注释 - 只解释了"how"却没有解释"why" 入门级的编程课程通常会教育学生们写代码前先写注释.而且要尽量多注释.这种教育的出发点是"多注 ...
- python培训出来的有公司要吗-参加Python培训到底需要学什么?好程序员
原标题:参加Python培训到底需要学什么?好程序员 参加Python培训到底需要学什么?好程序员,参加Python培训到底需要学什么?在选择靠谱的北京Python工程师培训之前,你自己也要对Pyth ...
- 【看动漫学编程】程序员在异世界生个娃 第2篇:外挂已准备就绪
前言 作者文笔比较水,还请见谅. 以下内容还将使用视频动态漫画表现,剪辑完将会贴出链接. 小说剧情为剧情需要,过渡到知识点,部分篇幅可能没有技术知识点还望谅解. 由于没有经费支持,所以画出来的东西是我 ...
- 【看动漫学编程】程序员在异世界生个娃 第1篇:太极村
前言 作者文笔比较水,还请见谅. 以下内容还将使用视频动态漫画表现,剪辑完将会贴出链接. 小说剧情为剧情需要,过渡到知识点,部分篇幅可能没有技术知识点还望谅解. 由于没有经费支持,所以画出来的东西是我 ...
- python开发pc软件_程序员带你十天快速入门Python,玩转电脑软件开发(二)
关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...
最新文章
- 【洛谷搜索专题Python和C++解】DFS和BFS经典题目(陆续补充)
- 深度分析:经典视频产品架构拆解
- 报错:“-bash: git: 未找到命令”
- php 导出csv设置列宽度,php数据库导出excel表格数据-php从数据库导出csv格式的Excel表格是,字段本身就......
- 木门怎么打_旧木门拆掉改成衣柜门,完工像收破烂的,要不是能省几个钱谁干?...
- 中国移动研究院人力群面
- MySQL结果集 数据查询(重点)
- Palindrome Number
- NetSetMan特别版 网络地址切换工具
- mq使用replyto队列进行消息回复
- 使用内核模块添加系统调用
- 困扰我许久的痛楚:闭包
- 计算机网络修复提示DNS服务器,dns被劫持或提示配置错误,该怎么解决
- 文科生学计算机能考研吗,求推荐文科生可以跨考计算机的名校
- 多用户博客BLOG系统大全
- mapBox使用笔记
- 【AE表达式】下载的模板表达式报错?大多数都是小问题!
- 复旦大学-华盛顿大学EMBA校友:将"她力量"变成"我们的力量"
- ubuntu 公网FTP搭建,解决无法连接
- 浦东朋友夏天的时间线
热门文章
- 20180908 2018-2019-2 《密码与安全新技术专题》第3周作业
- 关于反射中.getDeclaredContructor()返回构造方法顺序的问题(转)
- 单机(CentOS虚拟机)中部署Kubernetes
- 【论文研读】【医学图像】【R2UNet】Recurrent residual U-Net for medical image segmentation
- 解决Cannot dlopen some GPU libraries.问题
- 写出一下Java方法对应的签名_Java中的方法签名是否包含其返回类型?
- python3 数组转字符串_Q:与python3交互中字符串转gbk的问题
- python程序员工作总结_2016年终总结--一个Python程序猿的跨界之旅
- 记录——《C Primer Plus (第五版)》第九章编程练习第八题
- 二分查找以及数组下标的移动规律