百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Scikit-Learn最新更新简介

itomcoil 2025-05-23 17:46 4 浏览

Scikit-Learn应该是最著名的基于Python的机器学习库了。在深度学习火之前,直接应用Scikit-Learn应该就可以解决大多数机器学习问题了。但是,它对深度学习架构的算法支持不太好,因此这几年的风头略有欠缺。但是并不是所有的问题都需要深度学习,它支持的经典的算法非常易于使用,效果也很好。

Scikit-Learn的官方文档非常值得阅读,它不仅告诉我们如何使用,还在关键的地方告诉这些技术的原理。非常通俗易懂,还有实例。

Scikit-Learn有很优秀的机器学习处理思想,包括TensorFlow等新框架都借鉴了它的设计思想。最近的更新也让Scikit-Learn更加强大。在描述这个更新之前我们先简单看一下历史,然后让我们一起看看都有什么新内容吧。

  • Scikit-Learn历史简介
  • Scikit-Learn v0.22新特性基于Stacking的分类/回归算法基于排列的特征重要性计算多分类问题支持ROC-AUC计算基于kNN方法的缺失值填补对树进行剪枝

Scikit-Learn历史简介

Scikt-Learn是2007年Google Summer of Code的一个产物。后来经过大神的重写,在2010年重新发布。它集成了很多经典的机器学习算法。当然,Scikit-Learn不仅包含很多优秀的机器学习编程的设计思想,它的能力也很强,由于很多最底层的实现都是基于C语言的程序,因此Scikit-Learn在执行速度上也非常快。

Scikit-Learn v0.22新特性

在2019年12月3日发布的0.22版本除了修复了很多bug以外还有一些非常优秀的新特性。ANKIT CHOUDHARY已经帮我们总结了一些内容,主要如下:

基于Stacking的分类/回归算法

参加过Kaggle比赛的童鞋都知道,模型的stacking是必不可少的技能。将多个优秀的单个模型进行混合会在原有的基础上有所提升。这也是很多排名靠前的团队“调优”的重要方向。

在v0.22版本中,Scikt-Learn新增了stacking的方法,与之前的用法类似,我们很容易就能实现。以下是一个简单的示例:

from sklearn.linear_model import LogisticRegressionfrom sklearn.ensemble 
import RandomForestClassifierfrom sklearn.tree 
import DecisionTreeClassifierfrom sklearn.ensemble 
import StackingClassifierfrom sklearn.model_selection 
import train_test_split

X, y = load_iris(return_X_y=True)

estimators = [  ('rf', RandomForestClassifier(n_estimators=10, random_state=42)),    
              ('dt', DecisionTreeClassifier(random_state=42))]

clf = StackingClassifier(estimators=estimators, final_estimator=LogisticRegression())

X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=42)

clf.fit(X_train, y_train).score(X_test, y_test)

基于排列的特征重要性计算

As the name suggests, this technique provides a way to assign importance to each feature by permuting each feature and capturing the drop in performance.

简单解释一下,有时候我们需要了解每个特征在分类或者回归问题上的重要性。一般采用的方法是对某一个特征随机shuffle,然后使用模型进行预测,看这个shuffle特征之后的预测结果与原来的结果的差距。多次计算就能得到一个平均值,用这个值来表示特征重要性。

简单解释一下这个原理,其实也很简单。比如有两个特征预测收入,性别和身高。假如我们在身高不变的基础上,把性别特征打乱,比如把所有人的性别重新随机分。然后用新数据进行预测,得到的结果如果和打乱之前差不多,证明这个性别对预测作用不大。

基于这个原理我们可以知道每种特征的重要性。原来这种方式需要我们自己实现,在最新的Scikit-Learn中已经带有了这个功能。我们看一个示例:

from sklearn.ensemble import RandomForestClassifier
from sklearn.inspection import permutation_importance
from sklearn.datasets import make_classification

# Use Sklearn make classification to create a dummy dataset with 3 important variables out of 7
X, y = make_classification(random_state=0, n_features=7, n_informative=3)
rf = RandomForestClassifier(random_state=0).fit(X, y)

result = permutation_importance(rf, X, y,
                                n_repeats=10, # Number of times for which each feature must be shuffled
                                random_state=0, # random state fixing for reproducability
                                n_jobs=-1) # Parallel processing using all cores

fig, ax = plt.subplots()

sorted_idx = result.importances_mean.argsort()
ax.boxplot(result.importances[sorted_idx].T,           
           vert=False, labels=range(X.shape[1]))

ax.set_title("Permutation Importance of each feature")
ax.set_ylabel("Features")
fig.tight_layout()
plt.show()

结果如下:

多分类问题支持ROC-AUC计算

ROC-AUC是一种评估二分类问题的经典指标。ROC曲线描述的是模型区分能力,它的线条表示不论真实样本是0还是1,模型会预测成1的概率。其中横坐标表示0预测成1的概率,纵坐标表示1预测成1的概率。显然,如果这个线条是y=x的时候,不管真实样本是0还是1,模型预测成1的概率都一样,这就没有区分能力。显然最好的是真实结果是1,预测1的概率高一点最好。AUC就是ROC去线下方的面积,等于0.5就是y=x情况,最坏。我们希望它是1,这是最好的情况。

现在,Scikit-Learn将这个指标扩展到了多分类问题上。计算是采用两种方式:

  1. 对任意两个类别计算ROC AUC,然后取平均值
  2. 计算一个类别,剩下都是负类。取所有的平均值

基于kNN方法的缺失值填补

这个容易理解,就是对于缺失值的处理。采用kNN找最相似的点,然后把缺失值用最像的数据的值补上。一个简单示例:

import numpy as np
from sklearn.impute import KNNImputer

X = [[4, 6, np.nan], [3, 4, 3], [np.nan, 6, 5], [8, 8, 9]]
imputer = KNNImputer(n_neighbors=2)

print(imputer.fit_transform(X))

对树进行剪枝

剪枝就是通过某种技术降低决策树的大小,防止过拟合,并且加速模型。是一种非常重要且流行的技术。在最新的版本中Scikit-Learn提供了手工剪枝的方式(XGBoost或者LightGBM都已经包含了剪枝)。也就是树模型一旦建立,就可以利用这个技术降低模型大小。

一个简单示例:

from sklearn.ensemble import RandomForestClassifier 
from sklearn.datasets import make_classification

X, y = make_classification(random_state=0)
rf = RandomForestClassifier(random_state=0, ccp_alpha=0).fit(X, y)

print("Average number of nodes without pruning {:.1f}".format(    
  np.mean([e.tree_.node_count for e in rf.estimators_])))

rf = RandomForestClassifier(random_state=0, ccp_alpha=0.1).fit(X, y)
print("Average number of nodes with pruning {:.1f}".format(    
  np.mean([e.tree_.node_count for e in rf.estimators_])))

原文:
https://www.analyticsvidhya.com/blog/2020/02/everything-you-should-know-scikit-learn/

相关推荐

点过的网页会变色?没错,这玩意把你的浏览记录漏光了

提起隐私泄露这事儿,托尼其实早就麻了。。。平时网购、换手机号、注册各种账号之类的都会咔咔泄露,根本就防不住。但托尼真是没想到,浏览器里会有一个看起来完全人畜无害的功能,也在偷偷泄露我们的个人隐私,而且...

Axure教程:高保真数据可视化原型

本文将介绍如何制作Axure高保真数据可视化原型,供大家参考和学习。高保真数据可视化原型设计,称得上是Axure高阶水平。数据可视化在原型设计中是一个重要的分支,但是对于Axure使用者具有一定要求。...

Flutter web开发中禁用浏览器后退按钮

路由采用的go-router路由框架:finalrootNavigatorKey=GlobalKey<NavigatorState>();finalGoRouterrouter...

jQuery 控制属性和样式

标记的属性each()遍历元素:each(callback)方法主要用于对选择器进行遍历,它接受一个函数为参数,该函数接受一个参数,指代元素的序号。对于标记的属性而言,可以利用each()方法配合th...

微信小程序入门教程之二:页面样式

这个系列的上一篇教程,教大家写了一个最简单的Helloworld微信小程序。但是,那只是一个裸页面,并不好看。今天接着往下讲,如何为这个页面添加样式,使它看上去更美观,教大家写出实际可以使用的页...

如何在Windows11的任务栏中禁用和删除天气小部件图标?

微软该公司已在Windows11的任务栏中添加了一个天气小部件图标,作为小部件的入口点。这个功能与之前Win10上的新闻与资讯功能相同,但是有的用户不喜欢想要关闭,不知道如何操作,下面小编为大家带来...

CSS伪类选择器大全:提升网页交互与样式的神奇工具

CSS伪类选择器是前端开发中不可或缺的强大工具,它们允许我们根据元素的状态、位置或用户行为动态地应用样式。本文将全面介绍常用的伪类选择器,并通过代码示例展示其实际应用场景。一、基础交互伪类1.超链接...

7个Axure使用小技巧

编辑导读:对于Axure原型工具,很少有产品经过系统学习,一般都是直接上手,边摸索边学习,这直接导致很多快捷操作被忽视。笔者在日常工作中总结出以下小技巧,希望对各位有帮助。之前整理了2期Axure的...

JavaScript黑暗技巧:禁止浏览器点击“后退”按钮

浏览网页时,当从A页面点击跳转到B页面后,一般情况下,可以点击浏览器上的“后退”按钮返回A页面。如果进入B页面后,B页面想让访问者留下,禁止返回,是否可以实现呢?这简直是要控制浏览器的行为,虽然有些邪...

对齐PyTorch,一文详解OneFlow的DataLoader实现

撰文|赵露阳在最新的OneFlowv0.5.0版本中,我们增加了许多新特性,比如:新增动态图特性:OneFlow默认以动态图模式(eager)运行,与静态图模式(graph)相比,更容易搭建网...

Python计算机视觉编程 第一章 基本的图像操作和处理

以下是使用Python进行基本图像操作和处理的示例代码:使用PIL库加载图像:fromPILimportImageimage=Image.open("image.jpg"...

PyTorch 深度学习实战(31):可解释性AI与特征可视化

在上一篇文章中,我们探讨了模型压缩与量化部署技术。本文将深入可解释性AI与特征可视化领域,揭示深度学习模型的决策机制,帮助开发者理解和解释模型的内部工作原理。一、可解释性AI基础1.核心概念特征重要...

学习编程第177天 python编程 富文本框text控件的使用

今天学习的是刘金玉老师零基础Python教程第72期,主要内容是python编程富文本框text控件。一、知识点1.tag_config方法:利用某个别名作为标签,具体的对应标签的属性功能配置在后面参...

用Python讓電腦攝像頭實現掃二維碼

importsys#系統模組,用來存取命令列參數與系統功能importcv2#OpenCV,處理影像與相機操作importnumpyasnp#Numpy,用來處理數值與...

使用Transformer来做物体检测

作者:JacobBriones编译:ronghuaiyang导读这是一个Facebook的目标检测Transformer(DETR)的完整指南。介绍DEtectionTRansformer(D...