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

Scikit-Learn最新更新简介

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

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/

相关推荐

最强聚类模型,层次聚类 !!_层次聚类的优缺点

哈喽,我是小白~咱们今天聊聊层次聚类,这种聚类方法在后面的使用,也是非常频繁的~首先,聚类很好理解,聚类(Clustering)就是把一堆“东西”自动分组。这些“东西”可以是人、...

python决策树用于分类和回归问题实际应用案例

决策树(DecisionTrees)通过树状结构进行决策,在每个节点上根据特征进行分支。用于分类和回归问题。实际应用案例:预测一个顾客是否会流失。决策树是一种基于树状结构的机器学习算法,用于解决分类...

Python教程(四十五):推荐系统-个性化推荐算法

今日目标o理解推荐系统的基本概念和类型o掌握协同过滤算法(用户和物品)o学会基于内容的推荐方法o了解矩阵分解和深度学习推荐o掌握推荐系统评估和优化技术推荐系统概述推荐系统是信息过滤系统,用于...

简单学Python——NumPy库7——排序和去重

NumPy数组排序主要用sort方法,sort方法只能将数值按升充排列(可以用[::-1]的切片方式实现降序排序),并且不改变原数组。例如:importnumpyasnpa=np.array(...

PyTorch实战:TorchVision目标检测模型微调完

PyTorch实战:TorchVision目标检测模型微调完整教程一、什么是微调(Finetuning)?微调(Finetuning)是指在已经预训练好的模型基础上,使用自己的数据对模型进行进一步训练...

C4.5算法解释_简述c4.5算法的基本思想

C4.5算法是ID3算法的改进版,它在特征选择上采用了信息增益比来解决ID3算法对取值较多的特征有偏好的问题。C4.5算法也是一种用于决策树构建的算法,它同样基于信息熵的概念。C4.5算法的步骤如下:...

Python中的数据聚类及可视化分析实践

探索如何通过聚类分析揭露糖尿病预测数据集的特征!我们将运用Python的强力工具,深入挖掘数据,以直观的可视化揭示不同特征间的关系。一同探索聚类分析在糖尿病预测中的实践!所有这些可视化都可以通过数据操...

用Python来统计大乐透号码的概率分布

用Python来统计大乐透号码的概率分布,可以按照以下步骤进行:导入所需的库:使用Python中的numpy库生成数字序列,使用matplotlib库生成概率分布图。读取大乐透历史数据:从网络上找到大...

python:支持向量机监督学习算法用于二分类和多分类问题示例

监督学习-支持向量机(SVM)支持向量机(SupportVectorMachine,简称SVM)是一种常用的监督学习算法,用于解决分类和回归问题。SVM的目标是找到一个最优的超平面,将不同类别的...

25个例子学会Pandas Groupby 操作

groupby是Pandas在数据分析中最常用的函数之一。它用于根据给定列中的不同值对数据点(即行)进行分组,分组后的数据可以计算生成组的聚合值。如果我们有一个包含汽车品牌和价格信息的数据集,那么可以...

数据挖掘流程_数据挖掘流程主要有哪些步骤

数据挖掘流程1.了解需求,确认目标说一下几点思考方法:做什么?目的是什么?目标是什么?为什么要做?有什么价值和意义?如何去做?完整解决方案是什么?2.获取数据pandas读取数据pd.read.c...

使用Python寻找图像最常见的颜色_python 以图找图

如果我们知道图像或对象最常见的是哪种颜色,那么可以解决图像处理中的几个用例,例如在农业领域,我们可能需要确定水果的成熟度。我们可以简单地检查一下水果的颜色是否在预定的范围内,看看它是成熟的,腐烂的,还...

财务预算分析全网最佳实践:从每月分析到每天分析

原文链接如下:「链接」掌握本文的方法,你就掌握了企业预算精细化分析的能力,全网首发。数据模拟稍微有点问题,不要在意数据细节,先看下最终效果。在编制财务预算或业务预算的过程中,通常预算的所有数据都是按月...

常用数据工具去重方法_数据去重公式

在数据处理中,去除重复数据是确保数据质量和分析准确性的关键步骤。特别是在处理多列数据时,保留唯一值组合能够有效清理数据集,避免冗余信息对分析结果的干扰。不同的工具和编程语言提供了多种方法来实现多列去重...

Python教程(四十):PyTorch深度学习-动态计算图

今日目标o理解PyTorch的基本概念和动态计算图o掌握PyTorch张量操作和自动求导o学会构建神经网络模型o了解PyTorch的高级特性o掌握模型训练和部署PyTorch概述PyTorc...