sklearn学习笔记

2023-11-01

sklearn简介

2007年,数据科学家大卫·库尔纳佩(David Cournapeau)等人发起了机器学习的开源项目 sklearn,至今已逾十载。到目前为止,它已成为一款非常成熟的知名机器学习框架。

sklearn 是一款开源的 Python 机器学习库,它基于 NumPy 和 SciPy,提供了大量用于数据挖掘和分析的工具,以及支持多种算法的一系列接口。 和其他开源项目类似,sklearn 也是由社区成员自发组织和维护的。与其他开源项目不同的是,sklearn 更显“保守”。但这里的“保守”并非贬义,而是意味着“可靠”。

sklearn的七个流程

数据处理

从磁盘中读取数据,并对数据进行预处理,如归一化、标准化、正则化、属性缩放、特征编码、插补缺失值、生成多项式特征等。

分割数据

将数据随机分割成三组:训练集、验证集(有时为可选项)、测试集

训练模型

针对选取好的特征,使用训练数据来构建模型,即拟合数据,寻找最优的模型参数。这里的拟合数据,主要是指使用各种机器学习算法来学习数据中的特征,拟合出损失函数最小化参数

验证模型

使用验证集的数据接入模型。我们将模型在验证集上的表现作为模型参数优化和选择的依据。常用的方法有 Holdout 验证、留一验证(leave-one-out cross-validation)等。

测试模型

在优化模型的参数以后,使用测试数据验证模型的表现,可以评估模型的泛化性能。

使用模型

正所谓“养兵千日,用兵一时”。模型训练完毕后,就该“上战场”了,在全新数据集上进行预测。 所有机器学习算法的终极价值,都体现在对新数据的预测上。过往的历史数据(即训练数据)的价值,就在于“喂养”出一个靠谱的数据预言家,对我们从未接触过的新数据做出预测,从而指导我们未来的行为方向,实现基于数据的“洞察”。

调优模型

当我们不断使用更多的数据(包括预测的新数据)时,就会得到反馈,然后根据反馈重新调整数据使用策略,包括收集更为全面的数据、使用不同的特征、调整过往模型参数等,以此来迭代优化模型。实际上,以上 1~7 可以算作一个无限循环、迭代升级的过程。

sklearn的功能

sklearn 的功能主要分为六大部分:分类、回归、聚类、数据降维、模型选择和数据预处理。

分类

简单来说,如果定性输出预测(预测变量是离散值),可称之为分类(classification),比如预测花的品类、顾客是否购买商品等。sklearn 中已实现的经典分类算法包括:支持向量机(SVM)、最近邻算法、Logisti c回归、随机森林、决策树,以及多层感知器(Multilayer Perceptron,MLP)等。

回归

相比而言,如果定量输出预测(预测变量是连续值),则称之为回归(regression),比如预测花的长势、房价的涨势等。目前 sklearn 中已经实现的回归算法包括:线性回归、支持向量回归(SVR)、岭回归、Lasso 回归、贝叶斯回归等。常见的应用场景有股价预测等。

聚类

聚类(clustering)的功能是将相似的对象自动分组。sklearn 中常用的聚类算法包括:k 均值聚类、谱聚类(spectral clustering)、均值漂移(Mean shift)等。常见的应用场景有客户细分、实验结果分组及数据压缩等。

数据降维

数据降维(dimension reduction)的目的在于,减少要考虑的随机变量的数量。sklearn中常见的数据降维算法有主成分分析(Principal Components Analysis,PCA)、特征选择(feature selection)、非负矩阵分解(non-negative matrix factorization)等。常见的应用场景包括数据压缩、模型优化等。

模型选择

模型选择是指评估与验证模型,对模型参数进行选择与平衡。sklearn 提供了很多有用的模块,可实现许多常见功能,包括模型度量(metrics)、网格搜索(grid search)、交叉验证(cross validation)等。其目的在于,通过调整模型参数来提高模型性能(预测准确度、泛化误差等)。

数据预处理

数据预处理的功能在于,把输入数据(如文本、图形图像等)转换为机器学习算法适用的数据,主要包括数据特征的提取和归一化。在 sklearn 中,常用的模块有数据预处理(preprocessing)、特征抽取(feature extraction)等。

简单示例

#!/usr/bin/env python
# coding: utf-8

# In[4]:


from sklearn.datasets import load_boston
boston = load_boston()
print(boston.data)


# In[14]:


print(boston.data.shape)
print(boston.keys())
print(boston.target.shape)
print(boston.filename)
print(boston.feature_names)
# print(boston.DESCR)


# In[19]:


import pandas as pd
data=pd.DataFrame(boston.data)
print(data.head())


# In[23]:


data.columns=boston.feature_names
data.head()


# In[24]:


# 分割数据集,但给出的数据集已经将价格去掉,就不需要手动分割了,下面只写一个分割数据的示例
X=data.drop('B',axis=1)
y=boston.target


# In[27]:


# 引入分割数据集的模块,将这个数据分成两部分,一部分用来训练,另一部分用来测试模型
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=0)  #test_size参数表示测试集的大小是30%,random_state参数表示数据随机

print(X_test.shape)
print(y_test.shape)
X_test


# In[30]:


# 导入训练模型模块,这里导入的是线性回归模型
from sklearn.linear_model import LinearRegression  
LR=LinearRegression()  #生成模型
LR.fit(X_train,y_train)
y_pred=LR.predict(X_test)
LR.coef_   #每个特征值的权值


# In[34]:


# 绘制真实值和预测值的散点图,红色线是标准
import matplotlib.pylab as plt
import numpy as np
plt.scatter(y_test, y_pred)
x=np.arange(0,50)
y=x
plt.plot(x,y,color='red')
plt.show()


# In[35]:


# 评估模型
from sklearn import metrics
mse = metrics.mean_squared_error(y_test, y_pred)
print(mse)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sklearn学习笔记 的相关文章

  • API 端点的 Django 子域配置

    我已经建立了一个 Django 项目 它使用django rest framework提供一些 ReST 功能 网站和其他功能都运行良好 然而有一个小问题 我需要我的 API 端点指向一个不同的子域 例如 当用户访问该网站时 他 她可以根据
  • Python:记录垃圾收集器

    我有一个 python 应用程序 有一些性能问题 我想将垃圾收集器的事件 特别是何时调用 添加到我的日志中 是否可以 thanks http docs python org library gc html gc set debug http
  • 子进程改变目录

    我想在子目录 超级目录中执行脚本 我需要首先进入该子目录 超级目录 我无法得到subprocess进入我的子目录 tducin localhost Projekty tests ve python Python 2 7 4 default
  • Python 遍历目录树的方法是什么?

    我觉得分配文件和文件夹并执行 item 部分有点黑客 有什么建议么 我正在使用Python 3 2 from os import from os path import def dir contents path contents list
  • Python + PostgreSQL + 奇怪的ascii = UTF8编码错误

    我有包含字符的 ascii 字符串 x80 代表欧元符号 gt gt gt print x80 当将包含该字符的字符串数据插入数据库时 我得到 psycopg2 DataError invalid byte sequence for enc
  • html 解析器 python

    我正在尝试解析一个网站 我正在使用 HTMLParser 模块 问题是我想解析第一个 a href 评论后 但我真的不知道该怎么做 所以我在文档中发现有一个函数叫做handle comment 但我还没有找到如何正确使用它 我有以下内容 i
  • 如何找到列表S的所有分区为k个子集(可以为空)?

    我有一个唯一元素列表 比方说 1 2 我想将其拆分为 k 2 个子列表 现在我想要所有可能的子列表 1 2 1 2 2 1 1 2 我想分成 1 1 2 我怎样才能用 Python 3 做到这一点 更新 我的目标是获取 N 个唯一数字列表的
  • 如何使用循环将十进制转换为二进制?

    我想编写一个程序 将十进制数 0 到 9 转换为二进制数 我可以编写如何使用重复除法将十进制数转换为二进制数的代码 但是 我在创建一个以二进制格式打印十进制数字 0 到 9 的循环时遇到了麻烦 这是我的代码 number 0 remaind
  • 在Python中删除带有重音符号的字符串中的所有非字母字符

    我正在尝试使用 Python 3 7 从包含重音符号的字符串中删除所有非字母字符 空格除外 我尝试了以下方法 import re text 29 1981 4 2008 clean text re sub W d text print cl
  • Python正则表达式从字符串中获取浮点数

    我正在使用正则表达式来解析字符串中的浮点数 re findall a zA Z d d t 是我使用的代码 这段代码有问题 如果数字和任何字符之间没有空格 则不会解析该数字 例如 0 1 2 3 4 5 6 7 8 9 的预期输出为 0 1
  • 如何检查列表是否为空?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 例如 如果通过以下内容 a 我如何检查是否a是空的 if not a print Lis
  • 如何在C++中列出Python模块的所有函数名称?

    我有一个 C 程序 我想导入一个 Python 模块并列出该模块中的所有函数名称 我该怎么做 我使用以下代码从模块中获取字典 PyDictObject pDict PyDictObject PyModule GetDict pModule
  • 如何强制 Y 轴仅使用整数

    我正在使用 matplotlib pyplot 模块绘制直方图 我想知道如何强制 y 轴标签仅显示整数 例如 0 1 2 3 等 而不显示小数 例如 0 0 5 1 1 5 2 等 我正在查看指导说明并怀疑答案就在附近matplotlib
  • 如何设置 matplotlib 表中列的背景颜色

    我在一个目录中有多个 txt 文件 例如 d memdump 0 txt 1 txt 10 txt 示例文本文件如下 Applications Memory Usage kB Uptime 7857410 Realtime 7857410
  • 最小硬币找零问题——回溯

    我正在尝试用最少数量的硬币解决硬币找零问题 采用回溯法 我实际上已经完成了它 但我想添加一些选项 按其单位打印硬币数量 而不仅仅是总数 这是我下面的Python代码 def minimum coins coin list change mi
  • 在 Python 的 Textmate 中突出显示尾随空格?

    我想做类似的事情this http remysharp com 2008 03 30 trailing white space in textmate Textmate 提示 这样当我在 Python 中编写代码时 尾随空白总是以某种方式突
  • SQLAlchemy:避免声明式样式类定义中的重复

    我正在使用 SQLAlchemy 并且我的对象模型中的许多类具有相同的两个属性 id 和 整数和主键 以及名称 字符串 我试图避免在每个类中声明它们 如下所示 class C1 declarative base id Column Inte
  • 获取调用者文件的绝对路径

    假设我在不同的目录中有两个文件 1 py 比如说 在C FIRST FOLDER 1 py and 2 py 比如说 在C SECOND FOLDER 2 py 文件1 py进口2 py using sys path insert 0 pa
  • issubclass() 对从不同路径导入的同一类返回 False

    目的是实现某种插件框架 其中插件是同一基类 即 A 的子类 即 B 基类使用标准导入加载 而子类使用 imp load module 从众所周知的包 即 pkg 的路径加载 pkg init py mod1 py class A mod2
  • 为什么用字符串和时间增量转置 DataFrame 会转换数据类型?

    这种行为对我来说似乎很奇怪 id列 字符串 在转置后转换为时间戳df如果另一列是时间增量 import pandas as pd df pd DataFrame id 00115 01222 32333 val 12 14 170 df v

随机推荐

  • C++的三种实例化对象方式

    一 隐式创建 class CEmployee private int age int id public CEmployee cout lt lt 这是构造函数 lt lt endl CEmployee int id this gt id
  • C++ Qt常用面试题整理(不定时更新)

    目录 1 Qt基础知识 1 Qt信号槽机制的优势和不足 2 static和const的使用 3 指针常量 常量指针 常指针常量 4 指针和引用的异同 5 如何理解多态 6 虚函数表 7 常用数据结构 8 Tcp 2 C 基础 1 C语言和C
  • react项目路由组件懒加载和路由传值方式

    项目实战 使用useRoutes配置路由 结合插槽配置用户登录检测 用户登录成功进入login 直接系统主界面 路由模块抽离 整体代码外移 path admin element
  • IGBT选型和设计注意事项

    认识IGBT IGBT 绝缘栅双极型晶体管 是由 BJT 双极型三极管和绝缘栅型场效应管 MOS 组成的复合全控型电压驱动式功率半导体器件 兼有 MOSFET 金氧半场效晶体管的高输入阻抗和电力晶体管 GTR 的低导通压降两方面的优点 具有
  • 谷歌地图-----添加文本标注

    由于谷歌地图没有直接的类似百度地图API中的BMap Label 方法 var label new google maps Marker label color FFF 文本颜色 fontSize 14px 文本字体大小 text 我的文本
  • P5[3-1]GPIO输出端口(简介+结构+配置+电路+软件设计原理)

    注 GPIO命名是GPIOA GPIOB 每个GPIO都有16个引脚 PA0 PA1 PA15 寄存器就是特殊的存储器 内核通过APB2总线对寄存器进行读写 完成输出电平和读取电平功能 每一位对应一个引脚 输出寄存器写1 对应引脚输出高电平
  • Js 正则 大于0的数

    const reg 1 9 d d 1 6 0 d 1 6 以下正则也是正确的 const reg d 1 9 0 d 1 6 0 d 1 6 大于0 小数不限 const reg 1 9 0 9 0 d 1 9 d
  • vue中使用el-table组件进行分页多选,回显、切换分页记住上一页所勾选和取消的选项

    需求 1 table表格多选 并且切换分页之后能记住上一页的选项 2 回显数据 切换分页之后再切换回来依然能回显数据 3 点击选项 未保存数据 切换页面后再切换回来初始化数据勾选状态 4 全选 取消全选数据正常变化 5 使用了dialog来
  • IDEA隐藏不想看见的文件

    比如我在使用idea创建spring boot工程时会出现图中箭头指向的文件 但是我又不想看到它们 可以通过设置将其隐藏 单击文件 打开设置 在搜索框中输入File Types然后打开 在箭头所指的地方下面的输入框中输入你要隐藏的文件名 也
  • 函数对象简述

    使用方式 函数与函数对象 函数指针与函数对象 使用方式 函数对象 简而言之 就是类对于 运算符的重载 使我们可以像使用函数那样使用对象 示例如下 ifndef TOOBIG H define TOOBIG H template
  • 【完全开源】小安派-Audio 外置音频开发板

    目录 一 概述 二 系统框图 三 电源管理模块 四 外置语音模块 五 GPIO引脚设计 六 资料 一 概述 小安派 Audio AiPi Audio 是安信可团队专门为Ai M61 32S设计的音频驱动开发板 搭配BL618芯片 其外置ES
  • PyCharm中导入库的方法

    两种方法 1 搜索添加 列表中是已经存在的库 若需要添加库 点击 搜索 待库安装完成 即可使用 2 利用终端命令 输入代码 回车 即可完成 numpy库为例 我的是已经存在了
  • 【抽样技术】CH2 简单随机抽样

    目录 前言 一 定义 二 概述 1 总体 2 单元 3 抽样比 4 样本抽取原则 5 在抽样理论中的地位与作用 三 参数估计 1 参数表示 2 对总体特征的估计思路 3 对总体均值的估计 1 引理 2 对总体均值的估计 4 方差和协方差的估
  • ROS2学习笔记(三)从turtlesim学习ROS2主题

    从turtlesim学习ROS2主题 前言 学习ROS2的路 并不能通过学习ROS1代替 因为ROS2的 内核 不同于ROS1 必须认认真真从头开始重新学习 Ubuntu版本 20 04 ROS版本 Foxy 学习笔记回顾 ROS2学习笔记
  • Teamviewer检测为商业用途的解决方案

    Teamviewer检测为商业用途的解决方案 注意 Teamviewer远程链接需要两台计算机参与 需要在两台计算机上都安装Teamviewer软件 所以在链接中出现被检测到商业用途 并不知道到底是哪一台计算机上的电脑出现问题 所以如果按照
  • solr之lucene全文检索的基本原理

    一 总论 根据http lucene apache org java docs index html定义 Lucene是一个高效的 基于Java的全文检索库 所以在了解Lucene之前要费一番工夫了解一下全文检索 那么什么叫做全文检索呢 这
  • 从零开始学matplotlib画图(三): 堆积图

    堆积图常用于综合展示不同分类的指标趋势以及它们的总和的趋势 比如说 我们想看一下过去二十年来中国人口总量的变化趋势 同时 我们又想看一下男 女性人口各自的变化趋势 甚至我们还想看一下它们各自占比的变化趋势 这时 我们就可以用堆积图来更高效
  • 空类中都有哪些东西

    定义一个空类 里面什么内容都没有 class A 想想看 它的大小应该是多少 要计算一个类对象的大小 要知道这么几点 类大小是非静态数据成员的类型大小之和 若类中定义了虚函数 需要考虑到虚表指针也占用类对象的内存空间 32位机器下占用四字节
  • matlab如何显示神经网络的均方误差,matlab神经网络工具箱

    1 输入nftool 点击next 2 输入特征X 和目标值Y如下 注意按行 按列 3 设置训练集 验证集 测试机比例 一般默认为0 7 0 15 0 15 4 设置隐藏层个数 需要调的参数之一 5 选择优化算法 默认如图 点击train进
  • sklearn学习笔记

    sklearn简介 2007年 数据科学家大卫 库尔纳佩 David Cournapeau 等人发起了机器学习的开源项目 sklearn 至今已逾十载 到目前为止 它已成为一款非常成熟的知名机器学习框架 sklearn 是一款开源的 Pyt