《Scikit Learn | MorvanZhou 》learning notes

news2024/11/22 6:52:42

学习资源

  • https://scikit-learn.org/stable/
  • https://morvanzhou.github.io/tutorials/machine-learning/sklearn/

文章目录

  • 1 Why Scikit Learn
  • 2 通用学习模式(牛刀小试 pipeline)
  • 3 sklearn 强大数据库(Loaders / Sample Generator)
  • 4 sklearn 常用属性与功能(model)
  • 5 正规化 Normalization
  • 6

1 Why Scikit Learn

Scikit learn 也简称 sklearn, 是机器学习领域当中最知名的 python 模块之一.

sklearn 包含

  • Classification
  • Regression
  • Clustering
  • Dimensionality reduction
  • Model Selection
  • Preprocessing

在这里插入图片描述
图片来源:https://scikit-learn.org/stable/

Sklearn 官网提供了一个速查手册(cheat-sheet),不同的判定条件、不同的任务场景采用对应的不同算法,大致是4类

  • Classification
  • Regression
  • Clustering
  • Dimensionality reduction

在这里插入图片描述
图片来源:https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html

2 通用学习模式(牛刀小试 pipeline)

一招鲜吃遍天,了解一下,怎么使用 sklearn 来读数据,训练、测试模型!

我以 KNN 分类 iris 数据集为例,iris 数据集一共 150 个样本,输入 4 个特征,输出为 0/1/2 三类中的一种!我们把数据集按照 7:3 随机分成训练和测试集!

# View more python learning tutorial on my Youtube and Youku channel!!!

# Youtube video tutorial: https://www.youtube.com/channel/UCdyjiB5H8Pu7aDTNVXTTpcg
# Youku video tutorial: http://i.youku.com/pythontutorial

"""
Please note, this code is only for python 3+. If you are using python 2+, please modify the code accordingly.
"""
from __future__ import print_function
from sklearn import datasets
from sklearn.model_selection import train_test_split # 划分训练和测试数据集,shuffle
from sklearn.neighbors import KNeighborsClassifier # 导入模型

iris = datasets.load_iris()
iris_X = iris.data # 数据
iris_y = iris.target # 标签

print("feature shape:",iris_X.shape)
print("label shape:",iris_y.shape)
print("label:\n",iris_y)

X_train, X_test, y_train, y_test = train_test_split(
    iris_X, iris_y, test_size=0.3)

print("splited test label:\n", y_test)

knn = KNeighborsClassifier()
knn.fit(X_train, y_train)  # 开始训练

print("prediction:\n",knn.predict(X_test)) # 预测
print("ground truth:\n",y_test) # 对于测试集的 label

print("acc:",sum(knn.predict(X_test)==y_test)/len(y_test))

output

feature shape: (150, 4)
label shape: (150,)
label:
 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
splited test label:
 [0 1 1 0 1 2 2 1 2 0 2 1 0 0 0 2 2 0 2 1 2 2 1 0 1 1 1 2 2 0 0 0 2 0 2 2 1
 1 0 2 0 2 0 2 1]
prediction:
 [0 1 1 0 1 2 2 1 2 0 2 1 0 0 0 2 2 0 2 1 2 2 1 0 1 1 1 2 2 0 0 0 2 0 2 2 2
 2 0 2 0 2 0 2 1]
ground truth:
 [0 1 1 0 1 2 2 1 2 0 2 1 0 0 0 2 2 0 2 1 2 2 1 0 1 1 1 2 2 0 0 0 2 0 2 2 1
 1 0 2 0 2 0 2 1]
acc: 0.9555555555555556

可以看到 ACC还行,因为数据是 random shuffle 成 train 和 test data 的,所以,每一次运行结果不太一样,有的时候能到 100% 哟!

3 sklearn 强大数据库(Loaders / Sample Generator)

https://scikit-learn.org/stable/modules/classes.html#module-sklearn.datasets
在这里插入图片描述
可以导入现有的库,
在这里插入图片描述
例如 boston 数据集
在这里插入图片描述
samples 是 506,dimension 是 13,13 个 features

我们按照前面的流程走一遍,这里为了方便,就不再划分数据集了,整个数据集做为训练集

from __future__ import print_function
from sklearn import datasets
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

loaded_data = datasets.load_boston()
data_X = loaded_data.data
data_y = loaded_data.target

print("feature shape:",data_X.shape)
print("label shape:",data_y.shape)
print("part of label:\n",data_y[:5]) # 看看部分标签

model = LinearRegression()
model.fit(data_X, data_y)

# 看前5个样本的预测值和标签
print(model.predict(data_X[:5, :])) 
print(data_y[:5])

output

feature shape: (506, 13)
label shape: (506,)
part of label:
 [24.  21.6 34.7 33.4 36.2]
[30.00821269 25.0298606  30.5702317  28.60814055 27.94288232]
[24.  21.6 34.7 33.4 36.2]

哈哈,不是很准,回归波动 10 以内,label 的范围是 -5~50

也可以自己生成数据集!
在这里插入图片描述
eg,生成线性回归数据集

from __future__ import print_function
from sklearn import datasets
import matplotlib.pyplot as plt

X, y = datasets.make_regression(n_samples=100, n_features=1, n_targets=1, noise=0)
plt.scatter(X, y)
plt.show()

X, y = datasets.make_regression(n_samples=100, n_features=1, n_targets=1, noise=10)
plt.scatter(X, y)
plt.show()

X, y = datasets.make_regression(n_samples=100, n_features=1, n_targets=1, noise=50)
plt.scatter(X, y)
plt.show()

噪声 noise 参数设置的越大,波动越明显

在这里插入图片描述

4 sklearn 常用属性与功能(model)

以 boston 数据集为例,samples 是 506,dimension 是 13,13 个 features

from sklearn import datasets
from sklearn.linear_model import LinearRegression

loaded_data = datasets.load_boston()
data_X = loaded_data.data
data_y = loaded_data.target

model = LinearRegression()
model.fit(data_X, data_y) # 整个数据集当成训练集

print(model.predict(data_X[:4, :])) # 预测前 4 个样本的结果

output

[30.00821269 25.0298606  30.5702317  28.60814055] 

1)斜率和截距

print(model.coef_) # 斜率。boston 的 dimension 是 13,所有 13 个对应的系数
print(model.intercept_) # 截距

y = a 1 x 1 + a 2 x 2 + . . . + a 13 x 13 + b y = a_1x_1+a_2x_2+...+a_{13}x_{13}+b y=a1x1+a2x2+...+a13x13+b

output

[-1.07170557e-01  4.63952195e-02  2.08602395e-02  2.68856140e+00
 -1.77957587e+01  3.80475246e+00  7.51061703e-04 -1.47575880e+00
  3.05655038e-01 -1.23293463e-02 -9.53463555e-01  9.39251272e-03
 -5.25466633e-01]
36.49110328036198

在这里插入图片描述
图片来自:https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html#sklearn.linear_model.LinearRegression

2)查看模型已设置的参数,有些参数默认值不是 None

print(model.get_params())

output

{'copy_X': True, 'fit_intercept': True, 'n_jobs': 1, 'normalize': False}

在这里插入图片描述
图片来自:https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html#sklearn.linear_model.LinearRegression

3)给模型打分,LinearRegression 用的是 R 2 R^2 R2

print(model.score(data_X, data_y)) # R^2 coefficient of determination

output

0.7406077428649428

R 2 R^2 R2 定义如下,参考 https://www.cnblogs.com/jiangkejie/p/10677858.html
在这里插入图片描述

5 正规化 Normalization

preprocessing.scale 是 Z-Score,也就减去均值除以标准差,处理后的数据具有 0 均值,单位标准差的特点!

from sklearn import preprocessing #标准化数据模块
import numpy as np

#建立Array
a = np.array([[10, 2.7, 3.6],
              [-100, 5, -2],
              [120, 20, 40]], dtype=np.float64)

# 计算每列的均值
a_mean = a.mean(axis=0)
print(a_mean,"\n")

# 计算每列的标准差
a_std = a.std(axis=0)
print(a_std,"\n")

# 标准化
b = (a-a_mean) / a_std
print(b,"\n")

c = preprocessing.scale(a)
print(c)

output

[10.          9.23333333 13.86666667] 

[89.8146239   7.67086841 18.61994152] 

[[ 0.         -0.85170713 -0.55138018]
 [-1.22474487 -0.55187146 -0.852133  ]
 [ 1.22474487  1.40357859  1.40351318]] 

[[ 0.         -0.85170713 -0.55138018]
 [-1.22474487 -0.55187146 -0.852133  ]
 [ 1.22474487  1.40357859  1.40351318]]

减均值除以方差后,数据预处理为零均值,单位方差的形式

print(c.mean(axis=0))
print(c.std(axis=0))

output

[0.00000000e+00 1.48029737e-16 0.00000000e+00]
[1. 1. 1.]

再比如把数据 0-1化

from sklearn import preprocessing #标准化数据模块
import numpy as np

#建立Array
a = np.array([[10, 2.7, 3.6],
              [-100, 5, -2],
              [120, 20, 40]], dtype=np.float64)

a_min = a.min(axis=0)
a_max = a.max(axis=0)

b = (a-a_min) / (a_max-a_min)
print(b,"\n")

c = preprocessing.minmax_scale(a,feature_range=(0,1))
print(c)

output

[[0.5        0.         0.13333333]
 [0.         0.13294798 0.        ]
 [1.         1.         1.        ]] 

[[0.5        0.         0.13333333]
 [0.         0.13294798 0.        ]
 [1.         1.         1.        ]]

下面看看数据标准化对模型结果的影响(以 Z-Score 为例)

# 标准化数据模块
from sklearn import preprocessing 
import numpy as np

# 将资料分割成train与test的模块
from sklearn.model_selection import train_test_split

# 生成适合做classification资料的模块
from sklearn.datasets.samples_generator import make_classification 

# Support Vector Machine中的Support Vector Classifier
from sklearn.svm import SVC 

# 可视化数据的模块
import matplotlib.pyplot as plt 

#生成具有2种属性的300笔数据
X, y = make_classification(
    n_samples=300, n_features=2,
    n_redundant=0, n_informative=2, 
    random_state=22, n_clusters_per_class=1, 
    scale=100)

#可视化数据
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.show()

在这里插入图片描述
不 Z-Score 数据,用 SVM 分类试试,看下结果

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
clf = SVC()
clf.fit(X_train, y_train)
print(clf.score(X_test, y_test))

0.45555555555555555

数据归一化处理后,再看看分类的结果

X = preprocessing.scale(X)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
clf = SVC()
clf.fit(X_train, y_train)
print(clf.score(X_test, y_test))

0.9666666666666667

提升到了 0.9 以上

6

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

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

相关文章

new/delete内存分配操作符

目录 一、C/C的内存分布 二、new与delete操作符 1.new/delete 的使用 2.new申请失败抛异常 3.new/delete操作内置类型 4.new/delete 操作自定义类型 三、operator new与operator delete函数 四、new和delete的实现原理 1.对于内置类型 2.对于自定义类型 ①new的实现…

Prophet学习(四)趋势Changepoints

目录 趋势Changepoints(Trend Changepoints) Prophet中的自动更改点检测(Automatic changepoint detection in Prophet) 调整趋势灵活性(Adjusting trend flexibility) 指定变更点的位置(Spe…

DnCNN-pytorch版本代码运行环境配置

一、DnCNN-pytorch相关下载 (1)DnCNN-pytorch版本代码下载 https://download.csdn.net/download/qq_41104871/87457414 (2)GPU版本的torch0.4.1下载 https://download.csdn.net/download/qq_41104871/87658469 (3)相对应的torchvision0.2.1下载 https://download.csdn…

Redis多级缓存搭建(结合案例学习)

文章目录一. JVM进程缓存1. 在docker中安装Mysql服务2. 向数据库中导入数据和导入案例代码3. 在dokcer中部署nginx服务器实现方向代理4. 在nginx目录下导入主页面5. 配置nginx实现反向代理6. 初步认识Caffine7. 使用Caffeine实现本地进程缓存8. 总结二. LUA语法1. 初识Lua2. 基…

TCP并发服务器模型

文章目录1. 循环服务器2. 并发服务器2.1 多进程并发服务器2.2 多线程并发服务器3. 基于TCP的文件传输服务(目前只有下载)1.tftp下载模型2.TFTP通信过程总结3.tftp下载协议分析1. 循环服务器 一次只能处理一个客户端,等这个客户端退出后,才能处理下一个客…

vue大坑:v-for的key以及props传参不当导致的闭包

为什么props传参在模版中使用没问题&#xff0c;在函数中使用不变化 场景 当我们点击上方的月份时&#xff0c;会改变下方加载的卡片信息 代码&#xff1a; 父组件&#xff1a; <divv-for"(item, index) in vocalStore.getCardMonthData":key"index"…

电梯导航案例

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>小兔鲜儿 - 新鲜 惠民 快捷!</title><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"render…

WPS关闭不了后台一直运行的解决办法(wpscloudsvr.exe)

问题描述 前几天&#xff0c;发现每次打开wps时机箱风扇就转得厉害&#xff0c;把WPS界面叉掉后&#xff0c;桌面的任务栏—就是桌面最下面得黑框框—显示Windows图标和时间日期的那个地方也没有WPS任务&#xff0c;但是机箱还是响的厉害&#xff0c;检查了任务管理器发现一直…

SpringBoot自动配置的原理是什么?

自动配置的核心就在SpringBootApplication注解上&#xff0c;SpringBootApplication这个注解底层包含了3个注解&#xff0c;分别是&#xff1a; SpringBootConfiguration ComponentScan EnableAutoConfiguration EnableAutoConfiguration这个注解才是自动配置的核心。 它封…

速Raysync v6.6.8.0版本发布

最近镭速发布了v6.6.8.0版本&#xff0c;已经发布上线了。主要更新内容有服务器下发任务支持指定客户端&#xff0c;客户端增加日志清理和日志压缩&#xff0c;自动删除源文件保持源目录结构&#xff0c;支持将文件投递给其他成员等功能&#xff0c;详细的更新内容如下&#xf…

Flink DataStream读写Hudi

一、pom依赖 测试案例中&#xff0c;pom依赖如下&#xff0c;根据需要自行删减。 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-ins…

HTML+CSS+JS 学习笔记(一)———HTML(下)

&#x1f331;博客主页&#xff1a;大寄一场. &#x1f331;系列专栏&#xff1a;前端 &#x1f331;往期回顾&#xff1a;HTMLCSSJS 学习笔记&#xff08;一&#xff09;———HTML(上) HTMLCSSJS 学习笔记&#xff08;一&#xff09;———HTML(中) &#x1f618;博客制作不易…

Linux工具——gcc和gdb

&#x1f3c0;博主主页 &#x1f3c0;gitee主页 目录&#x1f3c0;Linux编译器-gcc⚽️gcc使用⚽️函数库&#x1f3c0;Linux调试器-gdb⚽️简介⚽️gdb使用&#x1f3c0;Linux项目自动化构建工具-make/Makefile⚽️简介⚽️依赖关系⚽️make/Makefile实现原理⚽️项目清理&…

证明电压电流相位差的余弦值和功率因数相等

证明&#xff1a;“电压电流相位差的余弦值”和“功率因数”相等。 电压电流相位差的余弦值和功率因数相等&#xff0c;这在《电路分析》中给出过结论&#xff0c;但没有给出详细的证明过程。其次&#xff0c;在电气工程师考试中&#xff0c;也会经常遇到。 电压电流相位差&am…

【Linux】虚拟机的克隆

【想要克隆虚拟机&#xff0c;被克隆的虚拟机必须是关机状态&#xff1b;】 一、克隆虚拟机 1、右击想要克隆的虚拟机 2、进入到这个页面后点击“下一步” 3、进入到这个页面后点击“下一步” 4、进入这个页面后选“创建完整克隆”&#xff0c;再点击下一步 5、最好将位置改成…

入门IC必读书目,你想知道的都在这里

在IC行业&#xff0c;技术和经验都很重要&#xff0c;为了更好的学习&#xff0c;现为大家整理了各岗位的学习书目。 通用基础类 《半导体物理学》 这本书被国内大部分高校都采用为半导体物理课程的教材。同时&#xff0c;也是部分高校推荐使用的微电子专业硕士生初试参考书。…

【cmake学习】搭建一个简单的cmake工程(优化版)

之前搭建了一个基本的cmake工程&#xff0c;仅使用了一个 CMakeLists.txt 文件来管理整个工程&#xff0c;实际上一个工程里可以包含多个 CMakeLists.txt 文件&#xff0c;这样做的目的是把引入所需文件、生成执行文件/库文件 这两个工作交由两个 CMakeLists.txt 分别实现。 【…

接口自动化【一】(抓取后台登录接口+postman请求通过+requests请求通过+json字典区别)

文章目录 前言一、requests库的使用二、json和字典的区别三、后端登录接口-请求数据生成四、接口自动化-对应电商项目中的功能五、来自postman的代码-后端登录总结前言 记录&#xff1a;json和字典的区别&#xff0c;json和字段的相互转化&#xff1b;postman发送请求与Python…

Python:清华ChatGLM-6B中文对话模型部署

1、简介 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型&#xff0c;基于 General Language Model (GLM) 架构&#xff0c;具有 62 亿参数。结合模型量化技术&#xff0c;用户可以在消费级的显卡上进行本地部署&#xff08;INT4 量化级别下最低只需 6GB 显存&#xff0…

SpringBoot程序运行时动态修改主数据库配置(不需要改配置,不需要重启)

SpringBoot程序运行时修改主数据库配置&#xff08;不需要改配置&#xff0c;不需要重启&#xff09;搞事背景心路历程搞事背景 在面试某家单位的时候&#xff0c;碰到了一家单位线上考试&#xff0c;要求开发一个springboot后台。一眼看去都是正常的需求&#xff0c;突然我在…