Python机器学习从零开始(三)数据准备

2023-11-05

目录

1.数据预处理

1.1调整数据尺度

1.2正态化数据

1.3标准化数据

1.4二值数据

2.数据特征选定

2.1单变量特征选定

2.2递归特征消除

2.3数据降维

2.4特征重要性

总结


        特征选择时困难耗时的,也需要对需求的理解和专业知识的掌握。在机器学习的应用开发中,最基础的是特征工程。

——吴恩达 

1.数据预处理

数据预处理需要根据数据本身的特性进行,有缺失的要填补,有无效的要剔除,有冗余维的要删除,这些步骤都和数据本身的特性紧密相关。

1.1调整数据尺度

如果数据的各个属性按照不同的方式度量数据,那么通过调整数据的尺度让所有属性按照相同的尺度来度量,就会给机器学习的算法模型训练带来极大的方便。

在scikit-learn中,可以通过Min Max Scalar类来调整数据尺度。将不同计量单位的数据统一成相同的尺度,利于对事物的分类或分组。Min Max Scalar其实是将属性缩放到一个指定范围,或者对数据进行标准化并将数据都聚集到0附近,方差为1。

from numpy import set_printoptions
from pandas import read_csv
from sklearn.preprocessing import MinMaxScaler

filename = 'pima_data.csv'
names = ['preg','plas','pres','skin','test','mass','pedi','age','class']
data = read_csv(filename,names = names)

#将数据分为输入数据和输出结果
array = data.values
X = array[:,0:8]
#X相当于所有数据
Y = array[:,8]
#Y为最后的class,即结果
transformer = MinMaxScaler(feature_range=(0,1)).fit(X)
#数据转化
newX = transformer.fit_transform(X)
#设定数据的打印格式
set_printoptions(precision=3)
#设置精度
print(newX)
[[0.353 0.744 0.59  ... 0.501 0.234 0.483]
 [0.059 0.427 0.541 ... 0.396 0.117 0.167]
 [0.471 0.92  0.525 ... 0.347 0.254 0.183]
 ...
 [0.294 0.608 0.59  ... 0.39  0.071 0.15 ]
 [0.059 0.633 0.492 ... 0.449 0.116 0.433]
 [0.059 0.467 0.574 ... 0.453 0.101 0.033]]

1.2正态化数据

正态化数据是有效的处理符合高斯分布数据的手段,输出结果以0为中位数,方差为1。使用scikit-learn提供的Standard Scalar类来进行正态化处理。

transformer = StandardScaler().fit(X)
#数据转换
_newX = transformer.transform(X)
#设定数据打印格式
set_printoptions(precision=3)
#设置精度
#print(_newX)
[[ 0.64   0.848  0.15  ...  0.204  0.468  1.426]
 [-0.845 -1.123 -0.161 ... -0.684 -0.365 -0.191]
 [ 1.234  1.944 -0.264 ... -1.103  0.604 -0.106]
 ...
 [ 0.343  0.003  0.15  ... -0.735 -0.685 -0.276]
 [-0.845  0.16  -0.471 ... -0.24  -0.371  1.171]
 [-0.845 -0.873  0.046 ... -0.202 -0.474 -0.871]]

1.3标准化数据

标准化数据是将每一行数据距离处理成1(在线性代数中矢量距离为1),又叫“归一元”处理,适合处理稀疏数据(具有很多为0的数据),归一元处理的数据对使用权重输入的神经网络和使用距离的K近邻算法的准确度的提升有显著作用

使用scikit-learn中的Normalizer类实现。

transformer = Normalizer().fit(X)
#数据转换
__newX = transformer.transform(X)
#设置数据打印格式
set_printoptions(precision=3)
print(__newX)
[[0.034 0.828 0.403 ... 0.188 0.004 0.28 ]
 [0.008 0.716 0.556 ... 0.224 0.003 0.261]
 [0.04  0.924 0.323 ... 0.118 0.003 0.162]
 ...
 [0.027 0.651 0.388 ... 0.141 0.001 0.161]
 [0.007 0.838 0.399 ... 0.2   0.002 0.313]
 [0.008 0.736 0.554 ... 0.241 0.002 0.182]]

1.4二值数据

二值数据是使用值将数据转化为二值,大于阈值设置为1,小于阈值设置为0。

使用scikit-learn中的Binarizer类实现。

transformer = Binarizer(threshold=0.0).fit(X)
#数据转换
newX_ = transformer.transform(X)
#设置数据打印格式
set_printoptions(precision=3)
print(newX_)
[[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.1单变量特征选定

统计分析可以用来分析选择对结果影响最大的数据特征。在scikit-learn中通过SelectKBest类来实现,使用一系列统计方法来选定数据特征,也是对卡方检验的实现。

卡方值越大,实际观测值与理论推断值之间越不符合;卡方值越小,实际观测值与理论推断值之间越符合;若两个值完全相等,卡方值为0。

from pandas import read_csv
from numpy import set_printoptions
from sklearn.feature_selection import chi2
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
from sklearn.ensemble import ExtraTreesClassifier

filename = 'pima_data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
array = data.values
X = array[:,0:8]
Y = array[:,8]

#通过卡方检验选定数据特征
#特征选定
test = SelectKBest(score_func=chi2,k=4)
fit = test.fit(X,Y)
set_printoptions(precision=3)
print(fit.scores_)
features = fit.transform(X)
print(features)

执行后得到了卡方检验对每一个数据特征的评分,以及得分最高的四个数据特征。

[ 111.52  1411.887   17.605   53.108 2175.565  127.669    5.393  181.304]
[[148.    0.   33.6  50. ]
 [ 85.    0.   26.6  31. ]
 [183.    0.   23.3  32. ]
 ...
 [121.  112.   26.2  30. ]
 [126.    0.   30.1  47. ]
 [ 93.    0.   30.4  23. ]]

2.2递归特征消除

递归特征消除(RFE)使用一个及模型来进行多轮训练,每轮训练后消除若干权值系数的特征,再基于新的特征集进行下一轮训练。通过每一个基模型的精度,找到对最终预测结果影响最大的数据特征。

#递归特征消除
#特征选定
model = LogisticRegression(max_iter=3000)#需要手动设置最大迭代次数
rfe = RFE(model,3)
fit = rfe.fit(X,Y)
print("特征个数:")
print(fit.n_features_)
print("被选定的特征:")
print(fit.support_)
print("特征排名:")
print(fit.ranking_)
特征个数:
3
被选定的特征:
[ True False False False False  True  True False]
特征排名:
[1 2 4 6 5 1 1 3]

2.3数据降维

常见降维方法有PCA(主要成分分析)和LDA(线性判别分析)。在聚类算法中,通常会用PCA对数据进行降维处理,以利于对数据的简化分析和可视化。

#主要成分分析(数据降维)
#通过主要成分分析选定数据特征
pca = PCA(n_components=3)
fit = pca.fit(X)
print("解释方差:%s"% fit.explained_variance_ratio_)
print(fit.components_)
解释方差:[0.889 0.062 0.026]
[[-2.022e-03  9.781e-02  1.609e-02  6.076e-02  9.931e-01  1.401e-02
   5.372e-04 -3.565e-03]
 [-2.265e-02 -9.722e-01 -1.419e-01  5.786e-02  9.463e-02 -4.697e-02
  -8.168e-04 -1.402e-01]
 [-2.246e-02  1.434e-01 -9.225e-01 -3.070e-01  2.098e-02 -1.324e-01
  -6.400e-04 -1.255e-01]]

2.4特征重要性

使用袋装决策树算法、随机森林算法和极端随机树算法可以计算数据特征的重要性。

#特征重要性
#特征选定
model = ExtraTreesClassifier()
fit = model.fit(X,Y)
print(fit.feature_importances_)
[0.109 0.234 0.101 0.077 0.076 0.14  0.121 0.142]

总结

本文主要讲了机器学习中的数据准备工作,包括数据预处理和数据特征选定,这些都是为了后序优化算法所做的准备工作。

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

Python机器学习从零开始(三)数据准备 的相关文章

  • 如何查看Databricks中的所有数据库和表

    我想列出 Azure Databricks 中每个数据库中的所有表 所以我希望输出看起来像这样 Database Table name Database1 Table 1 Database1 Table 2 Database1 Table
  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • 使用 pythonbrew 编译 Python 3.2 和 2.7 时出现问题

    我正在尝试使用构建多个版本的 python蟒蛇酿造 http pypi python org pypi pythonbrew 0 7 3 但我遇到了一些测试失败 这是在运行的虚拟机上 Ubuntu 8 04 32 位 当我使用时会发生这种情
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O

随机推荐

  • python 实现GUI(图形用户界面)编程

    Python支持多种图形界面的第三方库 包括 wxWidgets Qt GTK Tkinter Tkinter 模块 Tk 接口 是 Python 的标准 Tk GUI 工具包的接口 Tk 和 Tkinter 可以在大多数的 Unix 平台
  • Springboot整合Swagger2(3.0.0版本)

    天行健 君子以自强不息 地势坤 君子以厚德载物 每个人都有惰性 但不断学习是好好生活的根本 共勉 文章均为学习整理笔记 分享记录为主 如有错误请指正 共同学习进步 文章目录 Swagger2简介 开发环境 实现步骤说明 1 搭建项目 2 引
  • JxBrowser Java浏览器控件

    关键字 JxBrowser能在Windows Linux Mac OS X Intel and PPC based 平台上将Mozilla Firefox浏览器完美地整合到Java AWT Swing应用程序里 该库程序使用Gecko设计引
  • win7/win10电脑屏幕录像工具?

    目前windows系统中 windows 7系统是没有自带的录屏软件 windows 10系统也是对电脑型号有要求 所以在录屏的时候 就需要通过其他三方工具去处理 下载安装 一款优质录屏软件可以给我们的工作以及生活带来不少的便捷 QVE屏幕
  • linux 查看定时任务

    输入cd var spool cron命令 输入ls命令列出cron目录下的定时任务 vi 查看
  • 强制tensorflow使用cpu

    one start import tensorflow as tf cpu tf config list physical devices CPU tf config set visible devices cpu print tf con
  • Java 中SimpleDateFormat类的使用

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 SimpleDateFormat类的介绍 SimpleDateFormat类是一个具体的类 用于以区域设置敏感的方式格式化和解析日期 日
  • VirtualAPK 详解和使用,真牛

    3 1 基本原理 合并宿主和插件的ClassLoader 需要注意的是 插件中的类不可以和宿主重复 合并插件和宿主的资源 重设插件资源的packageId 将插件资源和宿主资源合并 去除插件包对宿主的引用 构建时通过Gradle插件去除插件
  • jeesite整合单点登录

    1 什么是单点登录 单点登录SSO Single Sign On 实际上就是用户在一个系统登录之后 在单点登录的其他客户端 应用 不用重复的登陆 登陆校验交给中央认证服务器去校验 单点登录的应用场景通常为一个大型的系统下有很多小系统 并且这
  • 数据结构之双链表(c语言附完整代码)

    文章目录 一 定义 二 基本运算 三 完整代码 一 定义 双向链表也叫双链表 是链表的一种 它的每个数据结点中都有两个指针 分别指向直接后继和直接前驱 所以 从双向链表中的任意一个结点开始 都可以很方便地访问它的前驱结点和后继结点 示意图
  • Confluence 7 如何修改启动内存

    和 Java 有关的项目通常和内存都有关 最近我们的 Confluence 平台经常挂起 通常的原因可能是内存溢出 在对 Confluence 进行调整之前 需要先查看下内存的配置情况 内存信息 在 Confluence 中 你可以查看当前
  • 【Java】垃圾回收

    目录 概述 什么是垃圾 Garbage 想要学习GC 首先需要理解为什么需要GC Java 垃圾回收机制 Java自动内存管理的优点 关于自动内存管理的担忧 GC 的作用区域 垃圾回收相关算法 重要 标记阶段 引用计数器算法和可达性分析算法
  • Dino 404

    未压缩的版本 可在此处改写 然后到https tool lu html 进行压缩
  • 人大金仓解决授权文件license过期问题

    错误描述 FATAL license file expired 查询授权文件过期时间 SELECT GET LICENSE VALIDDAYS 如果过期了需要替换 license 文件 从官网下载企业版或者专业版授权文件 官网下载地址 li
  • c++ map、multimap 的使用方法

    一 Map是c 的一个标准容器 它提供了很好一对一的关系 在一些程序中建立一个map可以起到事半功倍的效果 总结了一些map基本简单实用的操作 1 map构造函数 map
  • BUCK/BOOST电路原理分析

    Buck变换器 也称降压式变换器 是一种输出电压小于输入电压的单管不隔离直流变换器 图中 Q为开关管 其驱动电压一般为PWM Pulse width modulaTIon脉宽调制 信号 信号周期为Ts 则信号频率为f 1 Ts 导通时间为T
  • CSS 垂直居中

    直接上代码 justifyContent center 长度居中 display flex alignItems center 高度居中
  • 18-C++类与对象

    1 类和对象 C 面向对象的三大特性为 封装 继承 多态 gt 1 封装 class 类名 访问权限 属性 行为 include
  • Inno Setup 系列之添加管理员权限

    需求 Inno Setup打包的程序安装完成后运行失败 这个是因为权限不够 打包的应用需要管理员权限 解决 1 在 Setup 节点添加 PrivilegesRequired admin 2 在Inno Setup的安装目录下有个Setup
  • Python机器学习从零开始(三)数据准备

    目录 1 数据预处理 1 1调整数据尺度 1 2正态化数据 1 3标准化数据 1 4二值数据 2 数据特征选定 2 1单变量特征选定 2 2递归特征消除 2 3数据降维 2 4特征重要性 总结 特征选择时困难耗时的 也需要对需求的理解和专业