前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >sklearn 快速入门教程

sklearn 快速入门教程

作者头像
py3study
发布于 2020-01-16 07:04:44
发布于 2020-01-16 07:04:44
72300
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

1. 获取数据

1.1 导入sklearn数据集

  sklearn中包含了大量的优质的数据集,在你学习机器学习的过程中,你可以通过使用这些数据集实现出不同的模型,从而提高你的动手实践能力,同时这个过程也可以加深你对理论知识的理解和把握。(这一步我也亟需加强,一起加油!^-^)

首先呢,要想使用sklearn中的数据集,必须导入datasets模块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn import datasets

 下图中包含了大部分sklearn中数据集,调用方式也在图中给出,这里我们拿iris的数据来举个例子:

iris = datasets.load_iris() # 导入数据集 X = iris.data # 获得其特征向量 y = iris.target # 获得样本label

1.2 创建数据集

  你除了可以使用sklearn自带的数据集,还可以自己去创建训练样本,具体用法参见《Dataset loading utilities》,这里我们简单介绍一些,sklearn中的samples generator包含的大量创建样本数据的方法:

下面我们拿分类问题的样本生成器举例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.datasets.samples_generator import make_classification

X, y = make_classification(n_samples=6, n_features=5, n_informative=2, 
    n_redundant=2, n_classes=2, n_clusters_per_class=2, scale=1.0, 
    random_state=20)

# n_samples:指定样本数
# n_features:指定特征数
# n_classes:指定几分类
# random_state:随机种子,使得随机状可重
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> for x_,y_ in zip(X,y):
    print(y_,end=': ')
    print(x_)

    
0: [-0.6600737  -0.0558978   0.82286793  1.1003977  -0.93493796]
1: [ 0.4113583   0.06249216 -0.90760075 -1.41296696  2.059838  ]
1: [ 1.52452016 -0.01867812  0.20900899  1.34422289 -1.61299022]
0: [-1.25725859  0.02347952 -0.28764782 -1.32091378 -0.88549315]
0: [-3.28323172  0.03899168 -0.43251277 -2.86249859 -1.10457948]
1: [ 1.68841011  0.06754955 -1.02805579 -0.83132182  0.93286635]

2. 数据预处理

  数据预处理阶段是机器学习中不可缺少的一环,它会使得数据更加有效的被模型或者评估器识别。下面我们来看一下sklearn中有哪些平时我们常用的函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn import preprocessing

2.1 数据归一化

  为了使得训练数据的标准化规则与测试数据的标准化规则同步,preprocessing中提供了很多Scaler:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data = [[0, 0], [0, 0], [1, 1], [1, 1]]
# 1. 基于mean和std的标准化
scaler = preprocessing.StandardScaler().fit(train_data)
scaler.transform(train_data)
scaler.transform(test_data)

# 2. 将每个特征值归一化到一个固定范围
scaler = preprocessing.MinMaxScaler(feature_range=(0, 1)).fit(train_data)
scaler.transform(train_data)
scaler.transform(test_data)
#feature_range: 定义归一化范围,注用()括起来

2.2 正则化(normalize

  当你想要计算两个样本的相似度时必不可少的一个操作,就是正则化。其思想是:首先求出样本的p-范数,然后该样本的所有元素都要除以该范数,这样最终使得每个样本的范数都为1。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> X = [[ 1., -1.,  2.],
...      [ 2.,  0.,  0.],
...      [ 0.,  1., -1.]]
>>> X_normalized = preprocessing.normalize(X, norm='l2')

>>> X_normalized                                      
array([[ 0.40..., -0.40...,  0.81...],
       [ 1.  ...,  0.  ...,  0.  ...],
       [ 0.  ...,  0.70..., -0.70...]])

 2.3 one-hot编码

  one-hot编码是一种对离散特征值的编码方式,在LR模型中常用到,用于给线性模型增加非线性能力。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data = [[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]
encoder = preprocessing.OneHotEncoder().fit(data)
enc.transform(data).toarray()

3. 数据集拆分

  在得到训练数据集时,通常我们经常会把训练数据集进一步拆分成训练集和验证集,这样有助于我们模型参数的选取。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 作用:将数据集划分为 训练集和测试集
# 格式:train_test_split(*arrays, **options)
from sklearn.mode_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
"""
参数
---
arrays:样本数组,包含特征向量和标签

test_size:
  float-获得多大比重的测试样本 (默认:0.25)
  int - 获得多少个测试样本

train_size: 同test_size

random_state:
  int - 随机种子(种子固定,实验可复现)
  
shuffle - 是否在分割之前对数据进行洗牌(默认True)

返回
---
分割后的列表,长度=2*len(arrays), 
  (train-test split)
"""

4. 定义模型

  在这一步我们首先要分析自己数据的类型,搞清出你要用什么模型来做,然后我们就可以在sklearn中定义模型了。sklearn为所有模型提供了非常相似的接口,这样使得我们可以更加快速的熟悉所有模型的用法。在这之前我们先来看看模型的常用属性和功能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 拟合模型
model.fit(X_train, y_train)
# 模型预测
model.predict(X_test)

# 获得这个模型的参数
model.get_params()
# 为模型进行打分
model.score(data_X, data_y) # 线性回归:R square; 分类问题: acc

 4.1 线性回归

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.linear_model import LinearRegression
# 定义线性回归模型
model = LinearRegression(fit_intercept=True, normalize=False, 
    copy_X=True, n_jobs=1)
"""
参数
---
    fit_intercept:是否计算截距。False-模型没有截距
    normalize: 当fit_intercept设置为False时,该参数将被忽略。 如果为真,则回归前的回归系数X将通过减去平均值并除以l2-范数而归一化。
     n_jobs:指定线程数
"""

 4.2 逻辑回归LR

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.linear_model import LogisticRegression
# 定义逻辑回归模型
model = LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0, 
    fit_intercept=True, intercept_scaling=1, class_weight=None, 
    random_state=None, solver=’liblinear’, max_iter=100, multi_class=’ovr’, 
    verbose=0, warm_start=False, n_jobs=1)

"""参数
---
    penalty:使用指定正则化项(默认:l2)
    dual: n_samples > n_features取False(默认)
    C:正则化强度的反,值越小正则化强度越大
    n_jobs: 指定线程数
    random_state:随机数生成器
    fit_intercept: 是否需要常量
"""

 4.3 朴素贝叶斯算法NB

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn import naive_bayes
model = naive_bayes.GaussianNB() # 高斯贝叶斯
model = naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
model = naive_bayes.BernoulliNB(alpha=1.0, binarize=0.0, fit_prior=True, class_prior=None)
"""
文本分类问题常用MultinomialNB
参数
---
    alpha:平滑参数
    fit_prior:是否要学习类的先验概率;false-使用统一的先验概率
    class_prior: 是否指定类的先验概率;若指定则不能根据参数调整
    binarize: 二值化的阈值,若为None,则假设输入由二进制向量组成

 4.4 决策树DT

from sklearn import tree

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model = tree.DecisionTreeClassifier(criterion=’gini’, max_depth=None, 
    min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, 
    max_features=None, random_state=None, max_leaf_nodes=None, 
    min_impurity_decrease=0.0, min_impurity_split=None,
     class_weight=None, presort=False)
"""参数
---
    criterion :特征选择准则gini/entropy
    max_depth:树的最大深度,None-尽量下分
    min_samples_split:分裂内部节点,所需要的最小样本树
    min_samples_leaf:叶子节点所需要的最小样本数
    max_features: 寻找最优分割点时的最大特征数
    max_leaf_nodes:优先增长到最大叶子节点数
    min_impurity_decrease:如果这种分离导致杂质的减少大于或等于这个值,则节点将被拆分。
"""

4.5 支持向量机SVM

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.svm import SVC
model = SVC(C=1.0, kernel=’rbf’, gamma=’auto’)
"""参数
---
    C:误差项的惩罚参数C
    gamma: 核相关系数。浮点数,If gamma is ‘auto’ then 1/n_features will be used instead.
"""

 4.6 k近邻算法KNN

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn import neighbors
#定义kNN分类模型
model = neighbors.KNeighborsClassifier(n_neighbors=5, n_jobs=1) # 分类
model = neighbors.KNeighborsRegressor(n_neighbors=5, n_jobs=1) # 回归
"""参数
---
    n_neighbors: 使用邻居的数目
    n_jobs:并行任务数
"""

4.7 多层感知机(神经网络)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.neural_network import MLPClassifier
# 定义多层感知机分类算法
model = MLPClassifier(activation='relu', solver='adam', alpha=0.0001)
"""参数
---
    hidden_layer_sizes: 元祖
    activation:激活函数
    solver :优化算法{‘lbfgs’, ‘sgd’, ‘adam’}
    alpha:L2惩罚(正则化项)参数。
"""

5. 模型评估与选择篇

5.1 交叉验证

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.model_selection import cross_val_score
cross_val_score(model, X, y=None, scoring=None, cv=None, n_jobs=1)
"""参数
---
    model:拟合数据的模型
    cv : k-fold
    scoring: 打分参数-‘accuracy’、‘f1’、‘precision’、‘recall’ 、‘roc_auc’、'neg_log_loss'等等
"""

5.2 检验曲线

  使用检验曲线,我们可以更加方便的改变模型参数,获取模型表现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.model_selection import validation_curve
train_score, test_score = validation_curve(model, X, y, param_name, param_range, cv=None, scoring=None, n_jobs=1)
"""参数
---
    model:用于fit和predict的对象
    X, y: 训练集的特征和标签
    param_name:将被改变的参数的名字
    param_range: 参数的改变范围
    cv:k-fold
   
返回值
---
   train_score: 训练集得分(array)
    test_score: 验证集得分(array)
"""

例子

6. 保存模型

  最后,我们可以将我们训练好的model保存到本地,或者放到线上供用户使用,那么如何保存训练好的model呢?主要有下面两种方式:

6.1 保存为pickle文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pickle

# 保存模型
with open('model.pickle', 'wb') as f:
    pickle.dump(model, f)

# 读取模型
with open('model.pickle', 'rb') as f:
    model = pickle.load(f)
model.predict(X_test)

6.2 sklearn自带方法joblib

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.externals import joblib

# 保存模型
joblib.dump(model, 'model.pickle')

#载入模型
model = joblib.load('model.pickle')
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/06/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python sklearn模型选择
https://blog.csdn.net/finafily0526/article/details/79318401
统计学家
2019/07/22
1.3K0
全网最全的Scikit-Learn学习手册!
图解机器学习 本文详解 scikit-learn 工具库的用法,覆盖机器学习基础知识、SKLearn讲解、SKLearn三大核心API、SKLearn高级API等内容。
用户6888863
2023/03/01
2.4K0
全网最全的Scikit-Learn学习手册!
机器学习笔记之scikit learn基础知识和常用模块
主要包括特征提取(Feature Extraction)和特征选择(Feature Selection)
Jetpropelledsnake21
2020/12/31
1.3K0
数据科学和人工智能技术笔记 二、数据准备
波士顿住房数据集 是 20 世纪 70 年代的着名数据集。 它包含506个关于波士顿周边房价的观测。 它通常用于回归示例,包含 15 个特征。
ApacheCN_飞龙
2022/12/02
3460
集成学习2——sklearn实现
导入数据 import numpy as np import matplotlib.pyplot as plt from sklearn import datasets # 样本数,噪声设置,随机种子 # 学习make_moons随机数据集 X, y = datasets.make_moons(n_samples=500, noise=0.3, random_state=42) # X[y == 0,0]:先取出y值为0的值,再取第一个属性 plt.scatter(X[y == 0,0], X[y==0,
皮大大
2021/03/02
3370
sklearn库的功能_numpy库
sklearn是目前python中十分流行的用来实现机器学习的第三方包,其中包含了多种常见算法如:决策树,逻辑回归、集成算法等。
全栈程序员站长
2022/11/02
7970
1.6w字超全汇总!56个sklearn核心操作!!!
其中,X是特征数据,y是目标数据,test_size是测试集的比例(可以是0到1之间的值),random_state是随机种子,用于保证每次划分的结果一致。
Python编程爱好者
2024/05/13
4630
1.6w字超全汇总!56个sklearn核心操作!!!
python 超全sklearn教程,数据挖掘从入门到入坑
参考链接: 使用Scikit-Learn在Python中进行embedding/投票分类
用户7886150
2021/01/17
1.8K0
如何使用机器学习神器sklearn做特征工程?
本文中使用 sklearn 中的 IRIS(鸢尾花)数据集[1]来对特征处理功能进行说明。IRIS 数据集由 Fisher 在 1936 年整理,包含 4 个特征(Sepal.Length(花萼长度)、Sepal.Width(花萼宽度)、Petal.Length(花瓣长度)、Petal.Width(花瓣宽度)),特征值都为正浮点数,单位为厘米。目标值为鸢尾花的分类(Iris Setosa(山鸢尾)、Iris Versicolour(杂色鸢尾),Iris Virginica(维吉尼亚鸢尾))。导入 IRIS 数据集的代码如下:
爱编程的小明
2022/09/06
1.2K0
如何使用机器学习神器sklearn做特征工程?
使用scikit-learn进行数据预处理
导语 为什么要出这个教程?1.基本用例:训练和测试分类器练习2.更高级的用例:在训练和测试分类器之前预处理数据2.1 标准化您的数据2.2 错误的预处理模式2.3 保持简单,愚蠢:使用scikit-learn的管道连接器练习3.当更多优于更少时:交叉验证而不是单独拆分练习4.超参数优化:微调管道内部练习5.总结:我的scikit-learn管道只有不到10行代码(跳过import语句)6.异构数据:当您使用数字以外的数据时练习
Datawhale
2019/07/08
2.5K0
【sklearn | 4】 深度教程:模型部署与优化
模型部署是将机器学习模型集成到生产环境中,使其能够处理实时数据和提供预测结果的过程。sklearn 模型可以通过多种方式进行部署,如使用 Flask 构建 API 或者在云平台上部署。
颜淡慕潇
2024/07/24
3890
【sklearn | 4】 深度教程:模型部署与优化
Python玩机器学习简易教程
本文介绍利用Python和Python的机器学习库scikit-learn完成一个端到端的机器学习项目。 俗话说,“师傅领进门,修行在个人”。本文就是扮演领进门这种角色,至于各位看官能够修行到什么境界,全凭自己。 1 设置环境 2 导入所需库和模块 3 加载数据集 4 数据集划分为训练集和测试集 5 数据预处理 6 参数调优 7 模型优化(交叉验证) 8 全数据拟合 9 模型评估 10 模型保存 1 设置环境 检查电脑是否安装了Python以及相应库numpy/pandas/scikit-learn。 若是
陆勤_数据人网
2018/02/28
1.3K0
Python玩机器学习简易教程
sklearn 模型的保存与加载
在我们基于训练集训练了 sklearn 模型之后,常常需要将预测的模型保存到文件中,然后将其还原,以便在新的数据集上测试模型或比较不同模型的性能。其实把模型导出的这个过程也称为「对象序列化」-- 将对象转换为可通过网络传输或可以存储到本地磁盘的数据格式,而还原的过程称为「反序列化」。
生信菜鸟团
2020/09/04
9.5K0
机器学习实战 | 第二章:线性回归模型
线性回归(Linear Regression) 这个类是传统最小二乘回归的类.是最基础的线性回归的类. class sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1) 参数: fit_intercept : 布尔型,可选.是否计算模型的截距.要是设置为False的话,就不会计算截距了.(表明数据已经中心化了.) normalize : 布尔型,可选,默认是F
用户1332428
2018/03/08
7460
15分钟带你入门sklearn与机器学习——分类算法篇
【导读】众所周知,Scikit-learn(以前称为scikits.learn)是一个用于Python编程语言的免费软件机器学习库。它具有各种分类,回归和聚类算法,包括支持向量机,随机森林,梯度增强,k-means和DBSCAN,旨在与Python数值和科学库NumPy和SciPy互操作。本文将带你入门常见的机器学习分类算法——逻辑回归、朴素贝叶斯、KNN、SVM、决策树。
Python数据科学
2019/03/18
1.4K0
机器学习之sklearn基础教程
Sklearn(Scikit-learn)是一个开源的机器学习库,它提供了简单而有效的工具,用于数据挖掘和数据分析。Sklearn建立在Python之上,并且与NumPy和SciPy等其他Python库兼容。Sklearn广泛用于学术研究、工业应用和机器学习竞赛。在本教程中,我们将介绍Sklearn的基础知识,包括安装、数据预处理、选择模型、训练模型、评估模型和模型持久化。
正在走向自律
2024/12/18
2730
机器学习之sklearn基础教程
数据科学家的工具箱教程
非常实用,不扯任何理论概念 不包含python基础教程,numpy pandas等常见已经中文化很好的部分知识。
spark
2018/12/20
1.3K0
Python基础(十三) | 机器学习sklearn库详解与应用
可见,花瓣的长度和宽度有非常好的相关性。而花萼的长宽效果不好,因此考虑对他们丢弃。
timerring
2022/10/27
7090
数据科学和人工智能技术笔记 十二、逻辑回归
scikit-learn 的LogisticRegressionCV方法包含一个参数C。 如果提供了一个列表,C是可供选择的候选超参数值。 如果提供了一个整数,C的这么多个候选值,将从 0.0001 和 10000 之间的对数标度(C的合理值范围)中提取。
ApacheCN_飞龙
2022/12/02
7680
机器学习实战 | SKLearn最全应用指南
教程地址:http://www.showmeai.tech/tutorials/41
ShowMeAI
2022/03/21
1.8K0
机器学习实战 | SKLearn最全应用指南
相关推荐
Python sklearn模型选择
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验