速通sklearn库

news2024/11/26 10:17:03

速通sklearn库

前言

​ 最近在复习之前学习过的知识点,因此想到把学过的总结一下,方便后面再次复习,所以有了这个系列。

说明

​ 由于标题写的是“速通”,因此我的想法是可以让大家看完这篇文章,可以上手matplotlib库,并且明白怎么去实现自己想要的效果。

​ 有写错误/理解错误的地方,请大家批评指正。有任何问题,欢迎评论区留言,博主看到有空就会回复。

目录结构

文章目录

    • 速通sklearn库
      • 1. 下载与流程
        • 1.1 下载库
        • 1.2 使用流程
      • 2. 常用的机器学习方法
        • 2.1 常用机器学习方法
        • 2.2 训练模型方法
        • 2.3 模型预测
        • 2.4 模型评估
        • 2.5 模型的常用方法和属性
      • 3. 其它常用方法
        • 3.1 划分训练集和验证集
        • 3.2 数据标准化
        • 3.3 交叉验证
        • 3.4 数据归一化
        • 3.5 均方误差
        • 3.6 自带数据集加载
        • 3.7 one-hot编码
      • 4. 案例
      • 5. 总结

在这里插入图片描述

1. 下载与流程

1.1 下载库

​ sklearn是一个第三方库,其包含了常用的机器学习方法。下载方法:

pip install sklearn

​ 不过,在下载sklearn前,需要下载一些基础的库:

numpy、scipy、matplotlib、pandas

​ 也是通过pip下载。

1.2 使用流程

​ 可以说机器学习案例的使用流程基本上是固定的,常见的流程如下:

1. 导入对应模型
2. 数据处理
3. 创建模型
4. 训练模型
5. 预测、打印、保存参数等后处理操作

​ 对上面的流程进行说明:

  1. 首先,确定你要用何种机器学习模型,就可以确定导入的方法为何种
  2. 其次,需要加载原始数据,并进行数据的清洗(降维、划分等等)
  3. 根据需求,创建出模型,伪代码为model = xxx()
  4. 进行训练,这一步的伪代码为model.fit(x,y)
  5. 后处理,比如看看训练完毕的模型在测试集上的效果如何,或者保存已经训练好的参数等等。

​ 举个例子,来自我的博客《机器学习案例1:KNN实现鸢尾花分类》,代码如下:

# author: baiCai
# 1. 导包
import sklearn
from sklearn.neighbors import KNeighborsClassifier
from sklearn import model_selection
from sklearn.datasets import load_iris
from matplotlib import pyplot as plt

# 2. 加载数据
data = load_iris()
# print(data) # 返回的字典
# 划分数据集 8:2
x_train,x_test,y_train,y_test = model_selection.train_test_split(data['data'],data['target'],test_size=0.2,random_state=22)
# print(x_train.shape) # 120,4
# print(y_train.shape) # 120,

# # 3. 创建模型
# model = KNeighborsClassifier(n_neighbors=5)
# model.fit(x_train,y_train)
# # 评估
# score = model.score(x_test,y_test)
# print('测试集准确率:',score)
# # 评估2
# y_predict = model.predict(x_test)
# print('测试集对比真实值和预测值:',y_predict == y_test)

# 探究k值影响
model_new = {
    KNeighborsClassifier(n_neighbors=2),
    KNeighborsClassifier(n_neighbors=3),
    KNeighborsClassifier(n_neighbors=4),
    KNeighborsClassifier(n_neighbors=5),
    KNeighborsClassifier(n_neighbors=6),
    KNeighborsClassifier(n_neighbors=7),
    KNeighborsClassifier(n_neighbors=8),
    KNeighborsClassifier(n_neighbors=9),
    KNeighborsClassifier(n_neighbors=10),
}
score_list = []
# 4. 训练模型
for model in model_new:
    model.fit(x_train,y_train)
    score = model.score(x_test,y_test)
    score_list.append(score)
# 5. 后处理
# 画出图形
# 处理中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure()
plt.bar(range(2,11),score_list)
plt.title('不同K值准确率')
plt.show()
# print(score_list)

# 画出训练集
# 处理中文显示问题
# plt.rcParams['font.sans-serif'] = ['SimHei']
# plt.figure()
# c = ['r','b','g']   # 设置三个颜色
# color = [c[y] for y in y_train] # 为不同的标签设置颜色,比如0--r--红色
# plt.scatter(x_train[:,0],x_train[:,1],c=color)
# plt.title('训练集图')
# plt.xlabel('花萼长')
# plt.ylabel('花萼宽')
# plt.show()

在这里插入图片描述

2. 常用的机器学习方法

只要熟悉了sklearn的使用流程,那么你离熟悉它就差了一些方法的了解。这里我们先了解一下常用的机器学习方法所属库、名字以及重要参数

2.1 常用机器学习方法

​ 看下表,是我自己总结的:

模型名字所属库方法名重要参数
KNNsklearn.neighborsKNeighborsClassifiern_neighbors指定K值
KD树sklearn.neighborsKNeighborsClassifieralgorithm=‘kd_tree’
线性回归sklearn.linear_modelLinearRegression
线性回归sklearn.linear_modelSGDRegressorloss:损失类型
learning_rate 学习率
逻辑回归sklearn.linear_modelLogisticRegression
决策树sklearn.treeDecisionTreeClassifiercriterion=‘gini / entropy’ 指定划分标准
min_samples_split 内部节点划分最小样本数
min_samples_leaf 叶节点最小样本数
max_depth 最大深度
支持向量机sklearn.svmSVC
LinearSVC
C:正则化因子
kernel: 核函数,RBF/Linear/Poly/Sigmoid
degree: 针对多项式核函数,指定次数
主成分分析sklearn.decompositionPCAn_components 整数为输出特征数,小数为保留百分之多说的信息
随机森林sklearn.ensembleRandomForestClassifiern_estimators : 树木数量
Criterion : 默认基尼值
max_depth : 最大深度
oob_score=True 使用没有被选中的数据进行验证
XGBoostxgboost(单独的库)xgboost参数较多,看后面的案例
朴素贝叶斯sklearn.naive_bayesMultinomialNBalpha : 拉普拉斯平滑系数 1.0
高斯过程回归sklearn.gaussian_processGaussianProcessRegressor

​ 比如你要用支持向量机,那么可以按下述代码创建模型:

# 1. 导入模型
from sklearn.svm import SVC
# 2. 创建模型
model = SVC(kernel='rbf')

2.2 训练模型方法

​ 上述方法创建对象后,即可进行模型训练,一般模型训练代码都如下:

model.fit(x_train,y_train)

​ 当然使用的是训练集进行训练。

2.3 模型预测

​ 模型预测非常简单,方法都如下:

y_pred = model.predict(x_test)

​ 返回的就是模型预测值,如果是回归模型则返回的是预测值,如果是分类模型返回的就是概率值。

2.4 模型评估

​ 由于模型的评估有多种标准,因此也有多种方法。不过机器学习方法创建的对象,自带一个通用评估方法,即:

result = model.score(x_test,y_test)

​ 对于分类模型,它返回的就是分类的准确率。对于回归模型,它返回的就是拟合系数R2值(判断模型的拟合好坏)。

​ 而对于其它标准,比如均方误差等,就需要带入具体的方法进行使用。

2.5 模型的常用方法和属性

w参数

coef_: 对应 X 各个特征的系数。

b截距

intercept_: intercept_ 表示模型学习到的截距值。

训练模型

fit(X, y): 训练模型

预测

predict(X): 使用模型进行预测

准确率

score(X, y),返回准确率值 。

预测概率值:分类算法

predict_proba(X): 输出分类概率。

迭代次数

n_iter_:实际迭代次数。

3. 其它常用方法

上面的方法主要是创建模型和训练模型这块的内容,但是还有一大块的内容属于数据处理。

3.1 划分训练集和验证集

​ 方法如下:

X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.5, random_state=0)
'''
	前两个参数:x和y数据
	第三个参数: 测试集的比例
	第四个参数: 随机数种子
'''

3.2 数据标准化

​ 方法如下:

from sklearn import preprocessing
# 数据标准化: 即化为均值为0,方差为1的分布
standard = preprocessing.StandardScaler()
# 将训练集和测试集x数据进行表转化
x_train = standard.fit_transform(x_train)
x_test = standard.fit_transform(x_test)

3.3 交叉验证

方式一:

from sklearn.model_selection import cross_val_score
# 创建一个模型
clf = xxx()
# 开始验证:替代了模型的fit和score
scores = cross_val_score(clf, x, y, cv=5)
'''
参数:
	clf : 模型
	x : 数据集
	y : 标签
	cv : 指定验证次数,即k折
'''

方式二:针对数据

from sklearn.model_selection import KFold
# 数据
x = [xxxxxx]
# K折
kf = KFold(n_splits=2) # 指定次数
# 划分
for train, test in kf.split(X):
    xxx

3.4 数据归一化

​ 方法如下:

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler() #实例化
result_ = scaler.fit_transform(data)
'''
参数:
	feature_range=[5,10],默认范围[0,1]
'''

3.5 均方误差

​ 用于回归模型的评估,方法如下:

sklearn.metrics.mean_squared_error(y_true, y_pred)

3.6 自带数据集加载

鸢尾花数据集

from sklearn.datasets import load_iris
data = load_iris()

波士顿数据

from sklearn.datasets import load_boston
# 加载数据
data = load_boston()

3.7 one-hot编码

​ 主要用于NLP领域,方法如下:

from sklearn.preprocessing import OneHotEncoder
one_hot = OneHotEncoder(sparse=False)
# 参数: sparse=False,直接返回array对象,否则还需要转为array对象
# 开始转换(只针对y数据,不针对x数据)
y_test1 = one_hot.fit_transform(y_test.reshape(-1, 1))
y_pre1 = one_hot.fit_transform(y_pre.reshape(-1, 1))

4. 案例

​ 这一部分建议直接看我之前的博客,有10个小案例,可以通过我主页的机器学习专栏进入。

5. 总结

​ sklearn库其实比较简单(我们使用的比较简单),熟悉了固定流程,就只需要机器学习方法名再加上一些数据处理方法就可以套入使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/753663.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FCPX插件-复古老电影胶片边框幻灯片照片展示介绍动画 Emotion Slides

Emotion Slides是一款fcpx插件,可以制作复古老电影胶片边框幻灯片照片展示介绍动画,完全自定义任意数量的场景,完全定制的控制器,7个独特的场景准备,易使用简单,只需拖放。 Emotion Slides插件的主要功能包…

【网络编程】传输层协议——UDP协议

文章目录 一、传输层的意义二、端口号2.1 五元组标识一个通信2.2 端口号范围划分2.3 知名端口号2.4 绑定端口号数目问题2.5 pidof & netstat命令 三、UDP协议3.1 UDP协议格式3.2 如何理解报头?3.3 UDP协议的特点3.4 UDP缓冲区3.5 UDP传输最大长度 一、传输层的意…

基于linux下的高并发服务器开发(第一章)- GDB调试(1)1.13

掌握一个清屏快捷键&#xff1a;CTRLL 01 / 什么是GDB 02 / 准备工作 03 / GDB 命令 -- 启动、退出、查看代码 在~/Linux/lesson08目录下有test.c文件 #include <stdio.h> #include <stdlib.h>int test(int a);int main(int argc,char* argv[]){int a,b;printf(&…

React懒加载/动态加载(Suspense +lazy())简单实例

页面嵌套 两种页面嵌套的方式&#xff0c;一种是父子组件&#xff0c;一种是懒加载1、父子组件&#xff08;可略&#xff0c;只用来做例子对比&#xff09;2、使用懒加载 两种页面嵌套的方式&#xff0c;一种是父子组件&#xff0c;一种是懒加载 1、原本需要用父子组件来实现页…

计算机网络 day7 扫描IP脚本 - 路由器 - ping某网址的过程

目录 network 和 NetworkManager关系&#xff1a; 实验&#xff1a;编写一个扫描脚本&#xff0c;知道本局域网里哪些ip在使用&#xff0c;哪些没有使用&#xff1f; 使用的ip对应的mac地址都要显示出来 计算机程序执行的两种不同方式&#xff1a; shell语言编写扫描脚本 思…

selenium WebDriver 中的几种等待--sleep(),implicitly_wait(),WebDriverWait()

目录 强制等待:sleep() 隐式等待:implicitly_wait() 显示等待:WebDriverWait() 与until()或者until_not()方法结合使用 WebDriverWait与expected_conditions结合使用 显示等待,自定义等待条件 强制等待:sleep() import time sleep(5) #等待5秒 设置固定休眠时间&#x…

【JAVA】与数字相关的类,Number Math 类

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 文章目录 前言数据类型Number类介绍数据格式化实例 Math类介绍静态常量实例 前言 为了解决对数字、日期和系统设置进行处理的困难&#xff0c;如&#xff1a;一些数字&数学问题、随机…

【iOS】—— 编译链接

【iOS】—— 编译链接 文章目录 【iOS】—— 编译链接编译流程预处理&#xff08;预编译Prepressing&#xff09;编译&#xff08;Compilation&#xff09;汇编&#xff08;Assembly&#xff09;链接&#xff08;Linking&#xff09; 编译流程 编译流程分为四步 预处理&#…

基于mediapipe的手势识别

安装opencv:pip install opencv-python 安装mediapipe:pip install mediapipe draw_utils.py: import cv2 import numpy as npdef draw_line(img, width, height, hand, start_index, stop_index):for i in range(start_index, stop_index):x1, y1 = int(hand.landma…

Unity 多相机 同屏显示

一 首先了解&#xff1a; 相机和Canvas 的渲染先后关系 什么是相机的渲染顺序&#xff1f; 答&#xff1a;简单理解就是 用毛刷 刷墙面&#xff0c;先刷的&#xff0c;会被后刷的 挡住 。 列如&#xff1a;相机01&#xff1a; 先渲染的大海&#xff0c;相机02&#xff1a;后…

爬虫之Scrapy

一 介绍 Scrapy一个开源和协作的框架&#xff0c;其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的&#xff0c;使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛&#xff0c;可用于如数据挖掘、监测和自动化测试等领域&#x…

jquery实现甘特图时效管理

一、效果图 二、html文件 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html lang"en"><head><script src"../../../baoBiaoHtml/js/jquery-1.9.0.js"></script><script src"../..…

【GitOps系列】自动化构建Image

文章目录 使用 GitHub Action 构建镜像使用 GitLab CI 构建镜像使用 Tekton 构建镜像Tekton组件安装Tekton 简介创建 Tekton Pipeline创建 Task创建 Pipeline创建 EventListener创建 TriggerTemplate创建 Service Account 和 PVC设置 Secret 创建 GitHub Webhook触发 Pipeline …

markdown2html 转化流程

定义一个extensions function markedMention() {return {extensions: [{name: mention,level: inline,start(src) {// console.log("markedMention start....", src);return src.indexOf(#)},tokenizer(src, tokens) {const rule /^(#[a-zA-Z0-9])\s?/const match…

巴斯夫与长三角物理研究中心开展合作,专注固态和钠离子电池领域

“巴斯夫&#xff0c;全球知名化学公司&#xff0c;宣布与长三角物理研究中心合作&#xff0c;在江苏溧阳市成立联合研究中心&#xff0c;专注于固态电池和钠离子电池的科研。” 根据巴斯夫官方微博消息&#xff0c;新成立的研究中心名为“巴斯夫–长三角物理研究中心新能源汽车…

RAID6故障导致分区打不开的服务器数据恢复案例

服务器数据恢复环境&#xff1a; 一台infortrend存储&#xff0c;有一组由12块硬盘组建的RAID6&#xff0c;RAID6的所有空间划分给一个LUN并映射到WINDOWS系统上&#xff0c;WINDOWS系统上划分了一个GPT分区。 服务器故障&分析&#xff1a; 存储无法访问&#xff0c;经过检…

TIOBE统计数据

TIOBE统计数据&#xff08;2023年7月&#xff09; TIOBE Index编程社区指数是编程语言流行度的一个指标。评级基于全球熟练工程师的数量、课程和第三方供应商的数量。Google、Bing、Yahoo!、维基百科、亚马逊、YouTube 和百度等流行搜索引擎用于计算评级。 七月头条&#xff1…

【C语言提升】深入了解动态内存管理

目录 一、静态分配和动态分配 二、内存管理函数 1、malloc 申请堆区空间 2、calloc 申请堆区空间 3、free回收堆区空间权限 4、memset内存设置函数 5、realloc内存增减函数 三、内存泄漏&#xff08;了解&#xff09; 一、静态分配和动态分配 1、静态分配 在程序编译…

【Python】类型注解 ② ( 基础变量设置类型注解 | 类对象设置类型注解 | 容器变量设置简易类型注解 | 容器变量设置详细类型注解 )

文章目录 一、为变量设置类型类型注解1、变量设置 " 类型注解 " 语法2、为 基础类型变量 设置 " 类型注解 "3、为 类 的 对象类型 设置 " 类型注解 "4、为 基础容器类型变量 设置 简易 " 类型注解 "5、为 基础容器类型变量 设置 详细 …

gma 2 教程(二)数据操作:3. 支持生成的栅格格式信息

为了方便了解和选择输出栅格格式、配置高级创建选项&#xff0c;下表列出了gma可以生成&#xff08;复制/创建/转换&#xff09;的所有栅格格式的主要信息&#xff1a; 格式名生成模式支持数据类型扩展名多维栅格支持色彩映射表支持的数据类型多波段支持压缩模式AAIGrid复制By…