特征工程特征预处理归一化与标准化、鸢尾花种类预测代码实现

news2024/11/14 20:02:01

一、特征预处理

特征工程目的:把数据转换成机器更容易识别的数据 

scikit-learn:提供几个常见的实用程序函数和转换器类,以将原始特征向量更改为更适合下游估计器的表示形式。即通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程

特征的单位或大小相差较大,或某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征,故需要进行归一化/标准化处理

需要用到一些方法进行无量纲化使不同规格的数据转换到同一规格,包括归一化和标准化

二、归一化

归一化:通过对原始数据进行变换把数据映射到(默认为[0,1])之间

公式如下

作用于每一列,max为一列的最大值,min为一列的最小值,那么 X'' 为最终结果,mx,mi分别为指定区间值默认mx为1,mi为0,举例如下

使用API函数如下 

  • sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… ):feature_range指定范围
    • MinMaxScalar.fit_transform(X)
      • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后的形状相同的array

代码如下,海伦约会数据dating.txt文件见文末网盘链接

import pandas as pd
from sklearn.preprocessing import MinMaxScaler

data = pd.read_csv("../data/dating.txt")
print(data)
transfer = MinMaxScaler(feature_range=(0, 1))   # 实例化一个转换器类
minmax_data = transfer.fit_transform(data[['milage', 'Liters', 'Consumtime']])   # 调用fit_transform
print("最小值最大值归一化处理后的结果:\n", minmax_data)
-------------------------------------------------------------
输出:
     milage     Liters  Consumtime  target
0     40920   8.326976    0.953952       3
1     14488   7.153469    1.673904       2
2     26052   1.441871    0.805124       1
3     75136  13.147394    0.428964       1
4     38344   1.669788    0.134296       1
..      ...        ...         ...     ...
995   11145   3.410627    0.631838       2
996   68846   9.974715    0.669787       1
997   26575  10.650102    0.866627       3
998   48111   9.134528    0.728045       3
999   43757   7.882601    1.332446       3

[1000 rows x 4 columns]
最小值最大值归一化处理后的结果:
 [[0.44832535 0.39805139 0.56233353]
 [0.15873259 0.34195467 0.98724416]
 [0.28542943 0.06892523 0.47449629]
 ...
 [0.29115949 0.50910294 0.51079493]
 [0.52711097 0.43665451 0.4290048 ]
 [0.47940793 0.3768091  0.78571804]]

最大值最小值是变化的,容易受异常点影响,所以该方法鲁棒性较差,只适合传统精确小数据场景

三、标准化

标准化:通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内的数据

公式如下

 作用于每一列,mean为平均值,σ为标准差

  • 对归一化来说:若出现异常点,影响了最大值和最小值,那么结果显然会发生改变
  • 对标准化来说:若出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小

API如下

  • sklearn.preprocessing.StandardScaler( ):处理之后每列来说所有数据都聚集在均值0附近标准差差为1
    • StandardScaler.fit_transform(X)
      • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后的形状相同的array
from sklearn.preprocessing import StandardScaler
import pandas as pd
data = pd.read_csv("../data/dating.txt")
print(data)
transfer = StandardScaler()   # 实例化一个转换器
minmax_data = transfer.fit_transform(data[['milage', 'Liters', 'Consumtime']])   # 调用fit_transform
print("最小值最大值标准化处理后的结果:\n", minmax_data)
print("每一列特征的平均值:\n", transfer.mean_)
print("每一列特征的方差:\n", transfer.var_)
-------------------------------------------------------
输出:
     milage     Liters  Consumtime  target
0     40920   8.326976    0.953952       3
1     14488   7.153469    1.673904       2
2     26052   1.441871    0.805124       1
3     75136  13.147394    0.428964       1
4     38344   1.669788    0.134296       1
..      ...        ...         ...     ...
995   11145   3.410627    0.631838       2
996   68846   9.974715    0.669787       1
997   26575  10.650102    0.866627       3
998   48111   9.134528    0.728045       3
999   43757   7.882601    1.332446       3

[1000 rows x 4 columns]
最小值最大值标准化处理后的结果:
 [[ 0.33193158  0.41660188  0.24523407]
 [-0.87247784  0.13992897  1.69385734]
 [-0.34554872 -1.20667094 -0.05422437]
 ...
 [-0.32171752  0.96431572  0.06952649]
 [ 0.65959911  0.60699509 -0.20931587]
 [ 0.46120328  0.31183342  1.00680598]]
每一列特征的平均值:
 [3.36354210e+04 6.55996083e+00 8.32072997e-01]
每一列特征的方差:
 [4.81628039e+08 1.79902874e+01 2.46999554e-01]

标准化在已有样本足够多的情况下比较稳定,适合大数据场景

四、鸢尾花种类预测

近邻算法API

  • sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')
    • n_neighbors:int,可选(默认= 5),k_neighbors查询默认使用的邻居数
    • algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’}:快速k近邻搜索算法,默认参数为auto,可以理解为算法自己决定合适的搜索算法。除此之外,用户也可以自己指定以下搜索算法进行搜索
      • ball tree:是为了克服kd树高纬失效而发明的,其构造过程是以质心C和半径r分割样本空间,每个节点是一个超球体。
      • kd_tree:构造kd树存储数据以便对其进行快速检索的树形数据结构,kd树也就是数据结构中的二叉树。以中值切分构造的树,每个结点是一个超矩形,在维数小于20时效率高。
      • brute:是蛮力搜索,也就是线性扫描,当训练集很大时,计算非常耗时

Iris数据集

  • 实例数量: 150 (三个类各有50个)
  • 属性数量: 4 (数值型,数值型,帮助预测的属性和类)
  • 属性,特征值
    • sepal length:萼片长度(厘米)
    • sepal width:萼片宽度(厘米)
    • petal length:花瓣长度(厘米)
    • petal width:花瓣宽度(厘米)
  • 种类,目标值
    • Iris-Setosa:山鸢尾
    • Iris-Versicolour:变色鸢尾
    • Iris-Virginica:维吉尼亚鸢尾

 代码如下

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier  # 导入模块
# 1.获取数据集
iris = load_iris()
# 2.数据基本处理
# x_train,x_test,y_train,y_test为训练集特征值、测试集特征值、训练集目标值、测试集目标值
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)  # 划分数据集
# 3.特征工程:标准化
transfer = StandardScaler()  # 实例化转换器
x_train = transfer.fit_transform(x_train)  # 调用方法,标准化
x_test = transfer.transform(x_test)
# 4.机器学习(模型训练)
estimator = KNeighborsClassifier(n_neighbors=2)   # 实例化一个估计器,n_neighbors为选定参考的邻居数
estimator.fit(x_train, y_train)  # 模型训练
# 5.模型评估
# 方法1:比对真实值和预测值
y_predict = estimator.predict(x_test)
print("预测结果为:", y_predict)
print("比对真实值和预测值:", y_predict == y_test)
# 方法2:直接计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:", score)
-----------------------------------------------
输出:
预测结果为: [0 2 1 2 1 1 1 2 1 0 2 1 2 2 0 2 1 1 1 1 0 2 0 1 2 0 2 2 2 2]
比对真实值和预测值: [ True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True False  True  True  True  True  True
  True  True  True  True  True  True]
准确率为: 0.9666666666666667

海伦约会数据dating.txt获取下载:https://pan.baidu.com/s/1JFrp-3YQyH_zFBwWulNqmQ?pwd=68ww

学习导航:http://xqnav.top/ 

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

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

相关文章

IDEA基本配置

1.设置maven 1.在File->settings->搜索maven 2.Mavan home directory--设置maven安装包的bin文件夹所在的位置 3.User settings file--设置setting文件所在的位置 4.Local repository--设置本地仓库 2.IDEA 设置代码行宽度 1.在File->settings->Editor->Code St…

深度学习训练营之彩色图片分类

深度学习训练营原文链接环境介绍前置工作设置GPU导入数据归一化操作图片可视化构建CNN网络进行编译模型训练结果可视化图片展示对图片的内容进行辨别模型的精度评估原文链接 🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章&…

我为什么选择博客园!

过去一段时间我尝试了很多平台,说下感受。但是最后我还是选择了博客园。 1. 开始写csdn的原因: 积累一些东西,从而为自己的简历以及工作加分。 分享知识。 梳理知识和记录,因为好多东西做过,再问就忘了。尤其是面试…

深度学习-扩张卷积(dilated convolution)

1. 前言 扩张卷积(DilatedConvolution)也被称为空洞卷积或者膨胀卷积,是在标准的卷积核中注入空洞,以此来增加模型的感受野(receptionfield)\color{blue}{扩张卷积(Dilated Convolution&#xf…

IOS内测记录:在自有App中运行小程序游戏

作为FinClip的老用户,很早就向官方提出了希望支持微信小游戏的建议。现如今,官方也把小游戏支持提上了日程,近期开启了公测通道。团队用小游戏进行了测试,在这里记录分享一下测试情况。 实现效果将微信小游戏搬到自己的APP中使用…

python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译

在本文中,我们将看到如何创建语言翻译模型,这也是神经机器翻译的非常著名的应用。 最近我们被客户要求撰写关于NLP的研究报告,包括一些图形和统计输出。我们将使用seq2seq通过Python的Keras库创建我们的语言翻译模型。 假定您对循环神经网络…

飞行器动力学和控制项目(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 以下技术任务是在固定翼小型无人机上执行的。 刚体动力系统模型及其数值模拟。模拟具有测量误差的车载传感器。根据传感器数据…

【BUG日记】【Processing】NullPointerException,unable to decode sound file “xxx“

【日期】 2022/12/6 【问题】 报错:unable to decode sound file pig.mp3 想进行操作的是读取本地的图片或者音频,都会出现这个问题。 研究半天还一直以为是引入的 sound 库有问题。 音频的 bug 图片的 bug 【原因】 不知道什么原因,一直…

docker部署项目

文章目录前言一、下载安装docker:1.前提工作1.1 查看linux版本1.2 yum包更新到最新1.3 安装工具包1.4 设置yum源并更新yum包索引2.安装docker2.1 安装docker-ce2.2 启动docker2.3 查看已安装docker版本2.4 设置docker开机自启动2.5 配置镜像加速3.docker常用命令二、…

思科模拟器 | 交换机的vlan配置和truck配置

vlan 与 truck一、vlan配置【实现同一vlan的主机通信】1、基本配置和接线2、vlan配置与端口连接3、测试连接二、truck配置【实现连接在不同交换机上的同一vlan的主机通信】1、基本配置和接线2、vlan配置与端口连接3、打truck做连接3、测试连接一、vlan配置【实现同一vlan的主机…

vue Pinia 全局主题切换

文章目录vue Pinia 全局主题切换基本环境结果展示过程解析vue Pinia 全局主题切换 目的 : 实现单页面上切换主题,例如 关灯或开灯; 环境: vue3.0 vite Pinia 基本环境 // tsconfig.json 文件中 新增路径配置 导入自定义文件时可以之间导入 {"compilerOptions": {&…

Java多态

Java多态\color{black}{\huge{Java多态}}Java多态 多态 1. 什么是多态? 多态:同种类型的对象,执行同一个任务,会表现出不同的行为特征,这就是多态(这种解释顶级抽象) 再细致一点说多态就是为不同的数据类型提供了同…

RK3399平台开发系列讲解(内存篇)ARM64虚拟地址空间布局

🚀返回专栏总目录 文章目录 一、虚拟地址空间划分二、用户虚拟地址空间布局三、内核地址空间布局沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇章让我们一起看一下ARM64虚拟地址空间的布局。 一、虚拟地址空间划分 因为目前应用程序没有那么大的内存需求,所…

知识点9--Docker容器的数据卷

我前面介绍容器命令的时候,最后说过一个cp命令,可以把容器和宿主机之间的文件互相拷贝,保证数据的持久化,但是这种持久化偏向于比较独立完整的文件,大家有没有想过如果遇到成体系的数据保存,比如我整个数据…

精彩数据:2021年我国民旅客周转量6530亿公里,审定受理飞机2803架

2021年是特殊的一年,全体民航成员在努力克服疫情防控、经营亏损、安全压力等困难交织叠加的影响下,切实的推动了民航的高质量发展,再各项工作上都取得了较好的成绩。下面是小编使用可视化互动平台对民航发展统计报告进行报表数据处理分析后得…

超市商城小程序开发,在线盈利途径

随着消费意识的提高和零售业的不断升级,小程序已经成为目前重要的线上发展形势之一且具有很强的发展活力,在此发展机遇下,很多企业开始布局线上渠道,进入电商行业。超市作为日常生活中最常见、数量最多的线下门店,当然…

[基因遗传算法]原理思想和python代码的结合理解之(一) :单变量

读《遗传算法的Python实现(通俗易懂)》佳文的思考与笔记整理. 我们拥有一个目标函数y10⋅sin(5x)7⋅cos(4x)y10 \cdot sin(5x)7\cdot cos(4x)y10⋅sin(5x)7⋅cos(4x) def aim(x):return 10*np.sin(5*x)7*np.cos(4*x)约束范围(这里是定义域):x∈[0,5]x \…

如何选择分度带(中央子午线)

如何选择分度带(中央子午线) 发布时间:2018-01-17 版权: 同步视频教程:如何选择中央子午线或者分度带 播放 什么是中央子午线? 什么是分度带? 【百度百科】 第一步:查看你所下载(或者要套合的范围)的图像的经纬…

盘点| 爆款小游戏的开发引擎

微信推出小游戏已有4年,期间不断涌现爆款。作为可以不用下载安装直接在线玩的小程序游戏,小游戏渐渐成为不少人的心头好。今天就来盘点一下那些爆款小游戏用到的游戏开发引擎: 一、Cocos 必须得把Cocos放在第一个讲,毕竟近期的羊了…

计量经济学

计量经济学 复习题 题型:选择2*10;填空2*10;名词解释4*5;综合题10*4 一 选择填空考点 1. 截面数据,时间序列,面板数据定义。P12/1.3.3 截面数据:同一时间(时期或时点)某个…