归一化的作用,sklearn 安装

目录

归一化的作用:

应用场景说明

sklearn

准备工作

sklearn 安装

sklearn 上手

线性回归实战


归一化的作用:

  1. 归一化后加快了梯度下降求最优解的速度;

  2. 归一化有可能提高精度(如KNN)

应用场景说明

1)概率模型不需要归一化,因为这种模型不关心变量的取值,而是关心变量的分布和变量之间的条件概率;

2)SVM、线性回归之类的最优化问题需要归一化,是否归一化主要在于是否关心变量取值;

3)神经网络需要标准化处理,一般变量的取值在-1到1之间,这样做是为了弱化某些变量的值较大而对模型产生影响。一般神经网络中的隐藏层采用tanh激活函数比sigmod激活函数要好些,因为tanh双曲正切函数的取值[-1,1]之间,均值为0.

4)在K近邻算法中,如果不对解释变量进行标准化,那么具有小数量级的解释变量的影响就会微乎其微。

sklearn

是集成了最常用的机器学习模型的 Python 库,使用起来非常轻松简单,有着广泛的应用。sklearn 全称 scikit-learn,其中scikit表示SciPy Toolkit,因为它依赖于SciPy库。learn则表示机器学习。

官网地址:https://scikit-learn.org/stable/ 

中文文档:https://www.sklearncn.cn/

图片

Scikit-learn的基本功能主要被分为六大部分:分类,回归,聚类,数据降维,模型选择和数据预处理。

1.分类:是指识别给定对象的所属类别,属于监督学习的范畴,最常见的应用场景包括垃圾邮件检测和图像识别等。

目前Scikit-learn已经实现的算法包括:支持向量机(SVM),最近邻,逻辑回归,随机森林,决策树以及多层感知器(MLP)神经网络等等。 需要指出的是,由于Scikit-learn本身不支持深度学习,也不支持GPU加速,因此这里对于MLP的实现并不适合于处理大规模问题。

2.回归:是指预测与给定对象相关联的连续值属性,最常见的应用场景包括预测药物反应和预测股票价格等。目前Scikit-learn已经实现的算法包括:支持向量回归(SVR),脊回归,Lasso回归,弹性网络(Elastic Net),最小角回归(LARS),贝叶斯回归,以及各种不同的鲁棒回归算法等。可以看到,这里实现的回归算法几乎涵盖了所有开发者的需求范围,而且更重要的是,Scikit-learn还针对每种算法都提供了简单明了的用例参考。

3.聚类:是指自动识别具有相似属性的给定对象,并将其分组为集合,属于无监督学习的范畴,最常见的应用场景包括顾客细分和试验结果分组。目前Scikit-learn已经实现的算法包括:K-均值聚类,谱聚类,均值偏移,分层聚类,DBSCAN聚类等。

4.数据降维:是指使用主成分分析(PCA)、非负矩阵分解(NMF)或特征选择等降维技术来减少要考虑的随机变量的个数,其主要应用场景包括可视化处理和效率提升。

5.模型选择:是指对于给定参数和模型的比较、验证和选择,其主要目的是通过参数调整来提升精度。目前Scikit-learn实现的模块包括:格点搜索,交叉验证和各种针对预测误差评估的度量函数。

6.数据预处理:是指数据的特征提取和归一化,是机器学习过程中的第一个也是最重要的一个环节。这里归一化是指将输入数据转换为具有零均值和单位权方差的新变量,但因为大多数时候都做不到精确等于零,因此会设置一个可接受的范围,一般都要求落在0-1之间。而特征提取是指将文本或图像数据转换为可用于机器学习的数字变量。需要特别注意的是,这里的特征提取与上文在数据降维中提到的特征选择非常不同。特征选择是指通过去除不变、协变或其他统计上不重要的特征量来改进机器学习的一种方法。

图片

总结来说,Scikit-learn实现了一整套用于数据降维,模型选择,特征提取和归一化的完整算法/模块,虽然缺少按步骤操作的参考教程,但Scikit-learn针对每个算法和模块都提供了丰富的参考样例和详细的说明文档。

准备工作

任何一个工具箱都不是独立存在的,scikit-learn 是基于 Python 语言,建立在 NumPy ,SciPy 和 matplotlib 上。在上手sklearn之前,建议掌握的原理或工具有:

  • 机器学习算法原理。

  • PyCharm IDE 或者 Jupyter Notebook。

  • Python的基本语法和Python中的面向对象的概念与操作。

  • Numpy的基本数据结构和操作方法(加减乘除、排序、查找、矩阵的计算等)。

  • Pandas读写数据的方法,举个例子,读csv文件中的数据,用Pandas也就一句data = pandas.read_csv('data.csv')。

  • Matplotlib 绘图工具,满足我们对基本的数据结果的各种展示需求。

sklearn 安装

scikit-learn 安装非常简单:

使用 pip

pip install -U scikit-learn

或者 conda:

conda install scikit-learn

如果你还没有Python和Anaconda或者PyCharm,可以参考这篇文章

sklearn 上手

学习sklearn最好的方式,就是在实践中学习,让我们来看看用sklearn实现线性回归的例子。线性回归的公式非常简单:

 

图片

处于实际应用的角度,我们其实只关心两个问题:如何根据现有的数据算出线性回归模型的参数?参数求出之后我们怎么用它来预测?

sklearn 官网很直接地给出了这样一段代码:

import numpy as np
from sklearn.linear_model import LinearRegression
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
# y = 1 * x_0 + 2 * x_1 + 3
y = np.dot(X, np.array([1, 2])) + 3
reg = LinearRegression().fit(X, y)reg.coef_
# array([1., 2.])
reg.intercept_
# 3.0000...
reg.predict(np.array([[3, 5]]))
# array([16.])

 

Xarray([[1, 1],[1, 2],[2, 2],[2, 3]])
yarray([ 6,  8,  9, 11])

这里注意下,X 是一个 5×2 的数组(和矩阵稍有不同,但形状完全一样),而y是一个一维的数组。由此可见,我们要用来拟合的数据,其输入变量必须是列向量,而输出的这个变量则相对自由(注意,这也是sklearn相对比较坑的一点;官方的说法是为了节省内存开销,但如果熟悉Matlab、R等相对更加专业的计算类程序的人容易觉得不适应)。

那么明白了这一点,我们要输入怎样的数据就完全明确了。那么如果我们想换上自己的数据不外乎也就是把 X 和 y 按照同样的格式输入即可。

  • 第6行,首先是直接调用LinearRegression类的方法fit(X,y),直接实例化了一个线性回归模型,并且用上面生成的数据进行了拟合。

看到这里就能够明白了,原来只需要把数据按照格式输入,就可以完成模型的拟合。事实上这段代码也可以改成以下形式:

reg = LinearRegression()
reg.fit(X, y)

因为fit()方法返回值其实是模型本身self的一个实例(也就是返回了它自己,这个 LinearRegression对象),所以在初始化reg之后只需要直接调用fit(),它自己对应的系数值(属性)就被成功赋值。这种写法更为推荐,因为它虽然看起来多出一行,但整个运行的机制则显得更加清晰。

  • 第9和11行是系数和偏差值的展示。上面提到,注释中已经说明了数据就是由方程 生成的,而这时我们看到系数值分别等于 1,2 而偏差值是 3,和理论模型完全一致。

  • 第13行,此时它调用了LinearRegression类的predict()方法。那么显然,这个方法就是利用拟合好的线性回归模型来计算新输入值对应的输出值。这里新输入值仍然和拟合时的格式保持一致。

那么小结一下,根据官方文档,要拟合一个线性回归模型并且预测出新值的话,其实只需要进行四个步骤:

  1. 格式化数据,输入为n*d的数组,其中n表示数据的个数,d是维度;输出值是一维数组

  2. 初始化模型LinearReregression()

  3. 拟合fit(X,y)

  4. 预测predict(X_test)

线性回归实战

实战案例中使用了diabetes数据集。该数据集包括442位糖尿病患者的生理数据及一年以后的病情发展情况。共442个样本,每个样本有十个特征,分别是 [‘age’, ‘sex’, ‘bmi’, ‘bp’, ‘s1’, ‘s2’, ‘s3’, ‘s4’, ‘s5’, ‘s6’],对应年龄、性别、体质指数、平均血压、S1~S6一年后疾病级数指标。Targets为一年后患疾病的定量指标,值在25到346之间。

本节我们将通过糖尿病患者的体重bmi,预测糖尿病患者接下来病情发展的情况。在实际应用中,可以根据预测模型,提前预知患者的病情发展,从而提前做好应对措施,改善患者的病情。

# 导入必要的工具箱
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score# 导入糖尿病数据集
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)# Use only one feature
diabetes_X = diabetes_X[:, np.newaxis, 2]# 取第三列bmi的值# Split the data into training/testing sets
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]# Split the targets into training/testing sets
diabetes_y_train = diabetes_y[:-20]
diabetes_y_test = diabetes_y[-20:]# Create linear regression object
regr = linear_model.LinearRegression()# fit()函数拟合
regr.fit(diabetes_X_train, diabetes_y_train)# Make predictions using the testing set
diabetes_y_pred = regr.predict(diabetes_X_test)# The coefficients 输出回归系数
print("Coefficients: \n", regr.coef_)
# The mean squared error
print("Mean squared error: %.2f" % mean_squared_error(diabetes_y_test, diabetes_y_pred))
# The coefficient of determination: 1 is perfect prediction 决定系数,越接近1越好
print("Coefficient of determination: %.2f" % r2_score(diabetes_y_test, diabetes_y_pred))# Plot outputs
plt.scatter(diabetes_X_test, diabetes_y_test, color="black")
plt.plot(diabetes_X_test, diabetes_y_pred, color="blue", linewidth=3)plt.xticks(())
plt.yticks(())plt.show()
# print输出评价指标
Coefficients:[938.23786125]
Mean squared error: 2548.07
Coefficient of determination: 0.47

图片

通过模型可以看出,随着体重指标的增加,病情的级数也在增加,因此可以预测某位患者接下来一年内病情将会如何发展。当然,通过多变量分析我们可以得到更好的模型。

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

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

相关文章

ArrayList与顺序表

文章目录 一. 顺序表是什么二. ArrayList是什么三. ArrayList的构造方法四. ArrayList的常见方法4.1 add()4.2 size()4.3 remove()4.4 get()4.5 set()4.6 contains()4.7 lastIndexOf()和 indexOf()4.8 subList()4.9 clear() 以上就是ArrayList的常见方法&#xff01…

RHCE——九、SELinux

SELinux 一、概念1、作用2、SELinux与传统的权限区别 二、SELinux工作原理1、名词解释主体(Subject)目标(Object)策略(Policy)安全上下文(Security Context) 2、文件安全上下文查看1…

element——switch接口成功后赋值打开开关

应用场景 基本用法使用v-model双向绑定值,进行开关控制 例子1:需求: **点击switch,出弹窗,点击弹窗保存按钮调接口成功后再赋值(row.orderButtonValue“1”)打开switch开的状态变颜色。 在vue 中使用 :va…

安全开发-JS应用NodeJS指南原型链污染Express框架功能实现审计WebPack打包器第三方库JQuery安装使用安全检测

文章内容 环境搭建-NodeJS-解析安装&库安装安全问题-NodeJS-注入&RCE&原型链案例分析-NodeJS-CTF题目&源码审计打包器-WebPack-使用&安全第三方库-JQuery-使用&安全 环境搭建-NodeJS-解析安装&库安装 Node.js是运行在服务端的JavaScript 文档参考…

分布式事务篇-2.4 Spring-Boot整合Seata

文章目录 前言一、pom jar导入:二、项目配置:2.1 配置 说明:2.1 .1 seata server 端:2.1 .2 seata client 端: 2.2 开启seata 对于数据源的代理:2.3 seata-client 的注册中心:2.4 seata-client 的配置中心:2.5 去掉手写的数据源代…

【第四阶段】kotlin语言的mutator函数学习

1.mutator特性1:使用list可以直接 - fun main() {val list mutableListOf(123,456,789)//特性1 可是直接使用list -list 111list-123println(list) }执行结果 2.mutator特性2:removeIF() 如果实现是true 会自动遍历整个集合,一个一个的移除…

新亮点!安防视频监控/视频集中存储/云存储平台EasyCVR平台六分屏功能展示

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

【Robot Framework】发送GET和POST请求

做接口自动化时,经常要使用GET与POST请求,那么如何使用RF发送对应的请求呢? 一、安装RequestsLibrary pip install robotframework-requests安装以后,导入到对应的测试套件或测试用例中. 本次主要介绍通过RequestsLibrary来实现…

【状压+概率DP】CF678 E

Problem - E - Codeforces 题意&#xff1a; 思路&#xff1a; 首先&#xff0c;n < 18&#xff0c;应当想到状压 很明显&#xff0c;这里可以使用状压DP 设 dp[s][i] 表示&#xff0c;现在选的方案为 s &#xff0c;且我是 i 的最终胜利的概率是多少 重要的是转移 这是…

数学建模——校园供水系统智能管理

import pandas as pd data1pd.read_excel("C://Users//JJH//Desktop//E//附件_一季度.xlsx") data2pd.read_excel("C://Users//JJH//Desktop//E//附件_二季度.xlsx") data3pd.read_excel("C://Users//JJH//Desktop//E//附件_三季度.xlsx") data4…

飞天使-python的模块与包与装饰器

文章目录 模块与包标准模块第三方模块自定义模块 高级语法切片迭代器/生成器高级模式&#xff08;闭包&#xff09;高级模式&#xff08;装饰器&#xff09; 参考视频 模块与包 标准模块 import os print(os.getcwd())import sys print(sys.argv) print(sys.platform) print(…

ETC reset

ETC重新激活 换前挡风玻璃膜会把ETC设备拿下来&#xff0c;需要到【ETC服务中心】重新【粘上去】&#xff0c;另外需要工作人员用手持终端【重新激活】 ETC 背面有个 【白色】开关小柱子&#xff0c;一旦拆下来就失效&#xff0c;因为这个开关弹出来了 截面图看就是这样的&…

万人在线,一站式自动化运维 SysOM 3.0重磅发布!龙蜥社区系统运维 MeetUp 回顾来了

8 月 12 日&#xff0c;由龙蜥社区系统运维 SIG 主办&#xff0c;乘云数字协办的&#xff0c;主题为“观测&#xff0c;让运维更简单&#xff01;”的系统运维 MeetUp 于杭州圆满结束。来自乘云数字、谐云科技、乐维、云杉网络、擎创科技、观测云、阿里云以及浙江大学等众多厂商…

Linux 多线程同步机制(上)

文章目录 前言一、线程同步二、互斥量 mutex三、死锁总结 前言 一、线程同步 在多线程环境下&#xff0c;多个线程可以并发地执行&#xff0c;访问共享资源&#xff08;如内存变量、文件、网络连接 等&#xff09;。 这可能导致 数据不一致性, 死锁, 竞争条件等 问题。 为了解…

医院常见的HIS、CIS、LIS、EMR、PACS、RIS医疗信息化中的介绍

医院常见的HIS、CIS、LIS、EMR、PACS、RIS分别是&#xff1a; HIS&#xff08;Hospital Information System&#xff09;&#xff1a;医院信息系统&#xff0c;是医院管理信息化的核心系统&#xff0c;包括病人管理、医生管理、药品管理、医疗设备管理、财务管理等多个方面&am…

Unity插件---Dotween

1.什么是DOTween DoTween 是由 Demigiant 开发的&#xff0c;被广泛应用于 Unity 游戏开发中。它是一个流行的动画插件&#xff0c;被许多开发者用于创建流畅、高效的动画效果&#xff0c;提升游戏体验。 2.DOTween的初始配置 ①set up 首先找到DOTween Unity Panel 的面板 点…

c# 本地化中英文切换

区域 线程默认区域为当前计算机所选区域 设置当前区域&#xff1a; Thread.CurrentThread.CurrentCulture new CultureInfo(“zh-cn”); 获取当前区域&#xff1a; Console.WriteLine(Thread.CurrentThread.CurrentCulture.ToString()); 区域名称&#xff1a; “zh-cn” 中文…

数据结构(Java实现)-栈和队列

栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 先进后出 栈的使用 栈的模拟实现 上述的主要代码 public class MyStack {private int[] elem;private int usedSize;public MyStack() {this.elem new int[5];}Overridepublic …

【数学建模竞赛】各类题型及解题方案

评价类赛题建模流程及总结 建模步骤 建立评价指标->评价体系->同向化处理&#xff08;都越多越好或越少越少&#xff09;->指标无量纲处理 ->权重-> 主客观->合成 主客观评价问题的区别 主客观概念主要是在指标定权时来划分的。主观评价与客观评价的区别…

Django实现音乐网站 ⒁

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是歌手页-全部歌手页功能开发。 目录 分出首页样式内容 创建首页样式文件 首页引入样式文件 全部歌手列表 创建路由 显示视图 引入分页实现库 视图方法 创建歌手首页 增加歌手跳转 导航条改活 首页增加…