公众号:尤而小屋
作者:Peter
编辑:Peter

Scikit-learn是一个非常知名的Python机器学习库,它广泛地用于统计分析和机器学习建模等数据科学领域。

  • 建模无敌:用户通过scikit-learn能够实现各种监督和非监督学习的模型

  • 功能多样:同时使用sklearn还能够进行数据的预处理、特征工程、数据集切分、模型评估等工作

  • 数据丰富:内置丰富的数据集,比如:泰坦尼克、鸢尾花等,数据不再愁啦

本篇文章通过简明快要的方式来介绍scikit-learn的使用,更多详细内容请参考官网:

  1. 内置数据集使用

  2. 数据集切分

  3. 数据归一化和标准化

  4. 类型编码

  5. 建模6步曲

Scikit-learn使用神图

下面这张图是官网提供的,从样本量的大小开始,分为回归、分类、聚类、数据降维共4个方面总结了scikit-learn的使用:

https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html

安装

关于安装scikit-learn,建议通过使用anaconda来进行安装,不用担心各种配置和环境问题。当然也可以直接pip来安装:

pip install scikit-learn

数据集生成

sklearn内置了一些优秀的数据集,比如:Iris数据、房价数据、泰坦尼克数据等。

import pandas as pd
import numpy as npimport sklearn
from sklearn import datasets  # 导入数据集

分类数据-iris数据

# iris数据
iris = datasets.load_iris()
type(iris)sklearn.utils.Bunch

iris数据到底是什么样子?每个内置的数据都存在很多的信息

可以将上面的数据生成我们想看到的DataFrame,还可以添加因变量:

回归数据-波士顿房价

我们重点关注的属性:

  • data

  • target、target_names

  • feature_names

  • filename

同样可以生成DataFrame:

三种方式生成数据

方式1

#调用模块
from sklearn.datasets import load_iris
data = load_iris()#导入数据和标签
data_X = data.data
data_y = data.target

方式2

from sklearn import datasets
loaded_data = datasets.load_iris()  # 导入数据集的属性#导入样本数据
data_X = loaded_data.data
# 导入标签
data_y = loaded_data.target

方式3

# 直接返回
data_X, data_y = load_iris(return_X_y=True)

数据集使用汇总

from sklearn import datasets  # 导入库boston = datasets.load_boston()  # 导入波士顿房价数据
print(boston.keys())  # 查看键(属性)     ['data','target','feature_names','DESCR', 'filename']
print(boston.data.shape,boston.target.shape)  # 查看数据的形状
print(boston.feature_names)  # 查看有哪些特征
print(boston.DESCR)  # described 数据集描述信息
print(boston.filename)  # 文件路径

数据切分

# 导入模块
from sklearn.model_selection import train_test_split
# 划分为训练集和测试集数据
X_train, X_test, y_train, y_test = train_test_split(data_X, data_y, test_size=0.2,random_state=111
)# 150*0.8=120
len(X_train)

数据标准化和归一化

from sklearn.preprocessing import StandardScaler  # 标准化
from sklearn.preprocessing import MinMaxScaler  # 归一化# 标准化
ss = StandardScaler()
X_scaled = ss.fit_transform(X_train)  # 传入待标准化的数据# 归一化
mm = MinMaxScaler()
X_scaled = mm.fit_transform(X_train)

类型编码

来自官网案例:https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html

对数字编码

对字符串编码

建模案例

导入模块

from sklearn.neighbors import KNeighborsClassifier, NeighborhoodComponentsAnalysis  # 模型
from sklearn.datasets import load_iris  # 导入数据
from sklearn.model_selection import train_test_split  # 切分数据
from sklearn.model_selection import GridSearchCV  # 网格搜索
from sklearn.pipeline import Pipeline  # 流水线管道操作from sklearn.metrics import accuracy_score  # 得分验证

模型实例化

# 模型实例化
knn = KNeighborsClassifier(n_neighbors=5)

训练模型

knn.fit(X_train, y_train)
KNeighborsClassifier()

测试集预测

y_pred = knn.predict(X_test)
y_pred  # 基于模型的预测值
array([0, 0, 2, 2, 1, 0, 0, 2, 2, 1, 2, 0, 1, 2, 2, 0, 2, 1, 0, 2, 1, 2,1, 1, 2, 0, 0, 2, 0, 2])

得分验证

模型得分验证的两种方式:

knn.score(X_test,y_test)
0.9333333333333333
accuracy_score(y_pred,y_test)
0.9333333333333333

网格搜索

如何搜索参数

from sklearn.model_selection import GridSearchCV# 搜索的参数
knn_paras = {"n_neighbors":[1,3,5,7]}
# 默认的模型
knn_grid = KNeighborsClassifier()# 网格搜索的实例化对象
grid_search = GridSearchCV(knn_grid, knn_paras, cv=10  # 10折交叉验证
)
grid_search.fit(X_train, y_train)
GridSearchCV(cv=10, estimator=KNeighborsClassifier(),param_grid={'n_neighbors': [1, 3, 5, 7]})
# 通过搜索找到的最好参数值
grid_search.best_estimator_
KNeighborsClassifier(n_neighbors=7)
grid_search.best_params_

Out[42]:

{'n_neighbors': 7}
grid_search.best_score_
0.975

基于搜索结果建模

knn1 = KNeighborsClassifier(n_neighbors=7)knn1.fit(X_train, y_train)
KNeighborsClassifier(n_neighbors=7)

通过下面的结果可以看到:网格搜索之后的建模效果是优于未使用网格搜索的模型:

y_pred_1 = knn1.predict(X_test)knn1.score(X_test,y_test)
1.0
accuracy_score(y_pred_1,y_test)
1.0
往期精彩回顾适合初学者入门人工智能的路线及资料下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载本站qq群955171419,加入微信群请扫码:

【机器学习】机器学习神器Scikit-Learn保姆级入门教程相关推荐

  1. 深度学习保姆级入门教程 -- 论文+代码+常用工具

    导读 该篇文章可以看作是我研一如何入门深度学习的一个大总结,本人本科专业为软件工程,硕士期间研究方向为基于深度学习的图像分割,跨度相对而言不算太大.如果你对如何入门深度学习还很迷茫的话,那么请看下去吧 ...

  2. 微服务网关:SpringCloud Gateway保姆级入门教程

    什么是微服务网关 SpringCloud Gateway是Spring全家桶中一个比较新的项目,Spring社区是这么介绍它的: 该项目借助Spring WebFlux的能力,打造了一个API网关.旨 ...

  3. 什么是微服务网关?SpringCloud Gateway保姆级入门教程

    什么是微服务网关 SpringCloud Gateway是Spring全家桶中一个比较新的项目,Spring社区是这么介绍它的: 该项目借助Spring WebFlux的能力,打造了一个API网关.旨 ...

  4. 机器学习神器Scikit-Learn保姆级入门教程

    Scikit-learn是一个非常知名的Python机器学习库,它广泛地用于统计分析和机器学习建模等数据科学领域. 建模无敌:用户通过scikit-learn能够实现各种监督和非监督学习的模型 功能多 ...

  5. PyTorch 分布式框架 Ray :保姆级入门教程

    来源:官方博客 翻译:PyTorch 开发者社区(微信公众号) 今天的机器学习需要分布式计算.无论是训练网络.调整超参数.服务模型还是处理数据,机器学习都是计算密集型的,如果没有访问集群,速度会非常慢 ...

  6. Containerd 的前世今生和保姆级入门教程

    1. Containerd 的前世今生 很久以前,Docker 强势崛起,以"镜像"这个大招席卷全球,对其他容器技术进行致命的降维打击,使其毫无招架之力,就连 Google 也不例 ...

  7. ElasticSearch保姆级入门教程

    文章目录 一.初识ElasticSearch 二.安装Elasticsearch 2.1 创建网络 2.2 下载资源/加载镜像 2.3 运行 2.4 部署kibana 2.4.1 部署 2.5 安装I ...

  8. Vue保姆级入门教程

    文章目录 一.Vue 1.1 Vue介绍 1.2 Vue特点 1.3 Vue周边库 二.初始Vue 2.1 插值语法 2.2 指令语法 2.2.1 v:bind / 简写 : 指令 单向数据绑定 2. ...

  9. 管理订单状态,该上状态机吗?轻量级状态机COLA StateMachine保姆级入门教程

    前言 在平常的后端项目开发中,状态机模式的使用其实没有大家想象中那么常见,笔者之前由于不在电商领域工作,很少在业务代码中用状态机来管理各种状态,一般都是手动get/set状态值.去年笔者进入了电商领域 ...

最新文章

  1. MySQL的安装和初次使用
  2. uvc音频传输协议_蓝牙中的三种音频编码:Apt-X、SBC、AAC,请问分别有什么区别?...
  3. python 倒叙 数组_打基础一定要吃透这12类 Python 内置函数
  4. Abp vNext 二进制大对象系统(BLOB)
  5. linux命令apprw,linux命令学习1(示例代码)
  6. css折线效果,CSS3 box-shadow实现纸张的曲线投影效果 张鑫旭-鑫空间-鑫生活
  7. 【算法】BloomFilter 如何判断一个元素在亿级数据中是否存在?
  8. cmd执行bat结果不回显_cmd - 如何在bat文件中调用另一个bat文件
  9. 素数在c语言中怎么表示,请问素数怎么样表示
  10. 只管认真,有计划的坚持,剩下的交给时间
  11. 小偷写给失主的一封信 雷人啊!!
  12. win7安装visio2016需要通用CRT(KB2999226)
  13. ubuntu如何更改IP地址
  14. 好用的各种文件在线转换工具,文件加密解密等Speedpdf
  15. 2021年深圳市坪山区贴息贴保资助申请条件及材料,补贴100万元
  16. java通过SMS短信平台实现发短信的功能
  17. HDU-1205-吃糖果(c++的__int64!)
  18. Python字符串底层原理
  19. java 传值为不可变_Java函数传参(String的不可变性)
  20. 输入字符串“I am a student”,要求输出字符串“student a am I”

热门文章

  1. 【BZOJ2819】Nim 树状数组+LCA
  2. Timus 1049 Brave Balloonists
  3. 1. redis简介
  4. POJ 3280 Cheapest Palindrome(DP 回文变形)
  5. struts2和springmvc的区别
  6. Linux下安装MongoDB全程记录
  7. tr的display属性出现td的colspan无效问题
  8. Objective-C开发编码规范
  9. redis/分布式文件存储系统/数据库 存储session,解决负载均衡集群中session不一致问题...
  10. 在VS2013中打开Nuget