scikit-learn的5个秘密武器

本文涉及的产品
NLP自然语言处理_高级版,每接口累计50万次
NLP自然语言处理_基础版,每接口每天50万次
NLP 自学习平台,3个模型定制额度 1个月
简介: 虽然scikit-learn在机器学习领域很重要,但是很多人并不知道利用这个库中的一些强大的功能。本文将介绍scikit-learn中5个最有用的5个隐藏的瑰宝,充分利用这些秘密武器将有效提高你的机器学习处理的效率!

虽然scikit-learn在机器学习领域很重要,但是很多人并不知道利用这个库中的一些强大的功能。本文将介绍scikit-learn中5个最有用的5个隐藏的瑰宝,充分利用这些秘密武器将有效提高你的机器学习处理的效率!

1、数据集生成器

Scikit-learn有很多数据集生成器,可以用来生成各种复杂度和维度的人工数据集。

例如,make_blobs函数可以创建包含很多数据样本、聚类中心、维度的“blobs”或数据聚类。可视化以后可以清晰看出样本的分布:

在这里插入图片描述

Scikit-learn其实提供了很多数据集创建函数:

在这里插入图片描述

  • make_moons(n_samples=100, noise=0.1)
  • make_circles(n_samples=100, noise=0.05)
  • make_regression(n_samples=100, n_features=1, noise=15)
  • make_classification(n_samples=100)

2、流水线/Pipeline

流水线可以将不同的方法组合为单一模型,在自然语言处理(NLP)应用中这一点非常重要。可以通过组合多个模型的方式来创建流水线,数据将依次流过聚合模型中的各环节。流水线有标准的拟合与预测能力,这使得训练过程得到很好的组织。

很多对象都可以整合进流水线:

  • 缺失值处理器/Imputers:如果你的数据中包含缺失的数据,可以试试Simple Imputer或KNN Imputer
  • 编码器/Encoders:如果你的数据不是二进制分类,你可能需要使用一个Label Encoder或者One-Hot Encoder
  • NLP矢量化处理器/NLP Vectorizers:如果你在处理NLP数据,那么可以使用Count Vectorizer、TD-IDF Vectorize或者Hash Vectorizer
  • 数值变换:可以尝试标准化处理器、min-max缩放等等

3、网格搜索/GridSearchCV

在机器学习中的一个常见任务就是找出模型的正确参数集。通常你可以基于对任务的理解猜测参数的取值,或者编程找出最优集合。sklearn内置了函数GridSearchCV可以自动找出最优参数集。

GridSearchCV对象需要两个参数:首先是要训练的模型对象,例如下面示例中的SVM分类器,第二个则是一个描述参数模型的字典,字典的每一个键对应模型的一个参数,键值则是可能取值的列表。

from sklearn import svm, datasets
from sklearn.model_selection import GridSearchCV

iris = datasets.load_iris()
parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}
svc = svm.SVC()

clf = GridSearchCV(svc, parameters)
clf.fit(iris.data, iris.target)
clf.best_params_ #[Output]: {'C': 1, 'kernel': 'linear'}

网格搜索完成后,best_params属性中就记录了表现最好的模型参数。

4、验证曲线/validation_curve

要可视化一个参数对模型性能的影响,可以使用sklearn的validation_curve。这个函数需要一些参数 —— 模型、要调整的参数、参数的取值范围、运行的次数等。validation_curve类似于单变量的网格搜索,可以帮助你更好的可视化单个参数变化的效果。

from sklearn.model_selection import validation_curve
train_scores, valid_scores = validation_curve(model,
                                              X, y, 
                                              "max_depth", #model parameter to be adjusted
                                              range(2,7), #values of the parameter
                                              cv=10) #number of folds for k-fold evaluation

train_scores value: #Rows: number of parameter values (4), Columns: each of the values for the folds (10)
array([[0.96296296, 0.95555556, 0.96296296, 0.97037037, 0.95555556,
        0.95555556, 0.95555556, 0.96296296, 0.97037037, 0.96296296],
       [0.97037037, 0.97037037, 0.97777778, 0.98518519, 0.97037037,
        0.97037037, 0.97037037, 0.97037037, 0.97777778, 0.97777778],
       [0.99259259, 0.99259259, 0.99259259, 1.        , 0.99259259,
        0.99259259, 0.99259259, 1.        , 0.99259259, 0.99259259],
       [1.        , 1.        , 1.        , 1.        , 1.        ,
        1.        , 1.        , 1.        , 0.99259259, 1.        ],
       [1.        , 1.        , 1.        , 1.        , 1.        ,
        1.        , 1.        , 1.        , 1.        , 1.        ]])

validation_curve输出的结构是一个元组 —— 一个表示训练得分,另一个表示测试得分。数组中的每个元素表示k次运行中的一个参数值。

当绘制结果后,参数和精确度之间的关系就很清晰了:

import matplotlib.pyplot as plt
import seaborn as sns

sns.set_palette('RdYlGn')
sns.set_style('whitegrid')

params = range(2,10)
for index,param in enumerate(train_scores):
    sns.lineplot(range(10),param,label=params[index])
    
plt.title("Tree Depth Impact on Training Accuracy")
plt.xlabel("CV-Fold")
plt.ylabel("Training Accuracy")
plt.show()

在这里插入图片描述

这让我们可以可视化树的深度对准确度的影响。从上图中可以看到树深度为5或6时,模型的性能相当好,但是再继续增加深度就会导致过拟合。

K折交叉验证

交叉验证是一种准确度高于train_test_split的方法,并且通常需要更少的代码。在传统的训练/测试集拆分中,数据样本被随机的分配到训练集和测试集,通常比例为7:3~8:2,在训练集上训练模型,然后在测试集上评估模型,以确保模型真正泛化而非单纯的记忆。

然而由于每次分割是随机的,分割10次将产生10个不同的测试结果。

为了解决这个问题,K折交叉验证将数据拆分为K类,在其中K-1个子集上训练模型,在剩下的1个子集上测试模型。重复这一过程直至测试子集最终覆盖完整的数据集,那么就得到了完整并且可信的准确度指标。这种方法更好的一点是,不需要跟踪x-train、x-test、y-train和y-test变量。交叉验证唯一的缺点是需要更多时间 —— 不过要得到更好的结果总是要多付出一点成本。


原文链接:scikit-learn中的5个隐藏的瑰宝 — 汇智网

目录
相关文章
|
14天前
|
机器学习/深度学习 算法 数据挖掘
Python数据分析革命:Scikit-learn库,让机器学习模型训练与评估变得简单高效!
在数据驱动时代,Python 以强大的生态系统成为数据科学的首选语言,而 Scikit-learn 则因简洁的 API 和广泛的支持脱颖而出。本文将指导你使用 Scikit-learn 进行机器学习模型的训练与评估。首先通过 `pip install scikit-learn` 安装库,然后利用内置数据集进行数据准备,选择合适的模型(如逻辑回归),并通过交叉验证评估其性能。最终,使用模型对新数据进行预测,简化整个流程。无论你是新手还是专家,Scikit-learn 都能助你一臂之力。
68 8
|
8天前
|
机器学习/深度学习 Python
9-3|使用Python的scikit-learn库来训练一个逻辑回归模型,检测句子是否含有侮辱性内容:
9-3|使用Python的scikit-learn库来训练一个逻辑回归模型,检测句子是否含有侮辱性内容:
|
1月前
|
机器学习/深度学习 算法 数据挖掘
|
2月前
|
机器学习/深度学习 PHP 开发者
探索PHP中的面向对象编程构建你的首个机器学习模型:以Python和scikit-learn为例
【8月更文挑战第30天】在PHP的世界中,面向对象编程(OOP)是一块基石,它让代码更加模块化、易于管理和维护。本文将深入探讨PHP中面向对象的魔法,从类和对象的定义开始,到继承、多态性、封装等核心概念,再到实战中如何应用这些理念来构建更健壮的应用。我们将通过示例代码,一起见证PHP中OOP的魔力,并理解其背后的设计哲学。
|
16天前
|
机器学习/深度学习 数据采集 算法
机器学习新纪元:用Scikit-learn驾驭Python,精准模型选择全攻略!
在数据爆炸时代,机器学习成为挖掘数据价值的关键技术,而Scikit-learn作为Python中最受欢迎的机器学习库之一,凭借其丰富的算法集、简洁的API和高效性能,引领着机器学习的新纪元。本文通过一个实际案例——识别垃圾邮件,展示了如何使用Scikit-learn进行精准模型选择。从数据预处理、模型训练到交叉验证和性能比较,最后选择最优模型进行部署,详细介绍了每一步的操作方法。通过这个过程,我们不仅可以看到如何利用Scikit-learn的强大功能,还能了解到模型选择与优化的重要性。希望本文能为你的机器学习之旅提供有价值的参考。
21 0
|
2月前
|
机器学习/深度学习 人工智能 算法
如何使用Scikit-learn在Python中构建一个机器学习分类器
如何使用Scikit-learn在Python中构建一个机器学习分类器
22 3
|
2月前
|
机器学习/深度学习 运维 数据挖掘
scikit-learn 1.0 版本重要新特性一览
scikit-learn 1.0 版本重要新特性一览
|
2月前
|
机器学习/深度学习 数据挖掘 Python
简单几步,教你使用scikit-learn做分类和回归预测
简单几步,教你使用scikit-learn做分类和回归预测
|
3月前
|
机器学习/深度学习 数据采集 数据挖掘
深入Scikit-learn:掌握Python最强大的机器学习库
【7月更文第18天】在当今数据驱动的世界中,机器学习已成为解锁数据潜力的关键。Python凭借其简洁的语法和丰富的库生态,成为数据科学家和机器学习工程师的首选语言。而在Python的众多机器学习库中,Scikit-learn以其全面、高效、易用的特点,被誉为机器学习领域的“瑞士军刀”。本文旨在深入探讨Scikit-learn的核心概念、实用功能,并通过实战代码示例,带你领略其强大之处。
89 12
|
3月前
|
机器学习/深度学习 数据采集 数据挖掘
智能决策新引擎:Python+Scikit-learn,打造高效数据分析与机器学习解决方案!
【7月更文挑战第26天】在数据驱动时代,企业需从大数据中提取价值以精准决策。Python凭借丰富的库成为数据分析利器,而Scikit-learn作为核心工具备受青睐。本文通过电商案例展示如何预测潜在买家以实施精准营销。首先进行数据预处理,包括清洗、特征选择与转换;接着采用逻辑回归模型进行训练与预测;最后评估模型并优化。此方案显著提升了营销效率和企业决策能力,预示着智能决策系统的广阔前景。
72 2
下一篇
无影云桌面