Python机器学习入门(三)之Python数据准备
作者:靖墨c 发布时间:2021-05-27 19:49:42
特征选择时困难耗时的,也需要对需求的理解和专业知识的掌握。在机器学习的应用开发中,最基础的是特征工程。
——吴恩达
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]
来源:https://blog.csdn.net/m0_56627929/article/details/119812855


猜你喜欢
- Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能。Git有很多优势,其中之一就是远程操作非常简便。本文详细介绍5个Git
- 1. python三维图表绘制方法简介python三维图表的绘制算是二维图表的一个进阶版本,本质上和二维图表的绘制并无差别,唯一的区别在于使
- step 1:perpar database & datause mastergoCreate database Inventory
- 前2天群里发了张git历史图,如下:根据提交历史,可以看出图中所有分支合并都采用merge的方式,具体merge是怎么操作的,可以阅读下边文
- cursor就是一个Cursor对象,这个cursor是一个实现了迭代器(def__iter__())和生成器(yield)的MySQLdb
- 点击率预估模型0.前言本篇是一个基础机器学习入门篇文章,帮助我们熟悉机器学习中的神经网络结构与使用。日常中习惯于使用Python各种成熟的机
- 准备工作创建表use [test1]gocreate table [dbo].[student]( [id] [int] ide
- 1.安装vscode和python3.7(安装路径在:E:\Python\Python37);2.打开vscode,在左下角点击设置图标选择
- Image and text elements that appear in another element are called floa
- 情景一: var yx01 = new function() {return "圆心"}; alert(yx01);我们
- 本文实例讲述了JS实现屏蔽网页右键复制及ctrl+c复制的方法。分享给大家供大家参考,具体如下:老是有些网站会屏蔽你的鼠标右键或者用快捷键复
- 本文实例讲述了C#将图片存放到SQL SERVER数据库中的方法。分享给大家供大家参考。具体如下:第一步: //获取当前选择的图片
- 例题取用登录模块:代码如下def login_check(username,password):''' 登录校验的函
- 一、Selects检索表中的所有行$users = DB::table('users')->get();foreach
- python中的email模块可以方便的解析邮件,先上代码#-*- encoding: gb2312 -*-import osimport
- 实现流程从摄像头获取视频流,并转换为一帧一帧的图像,然后将图像信息传递给opencv这个工具库处理,返回灰度图像(就像你使用本地静态图片一样
- 如何实现在下拉菜单里输入文字? 用这个代码试试看,应该可以的:<script>function pp(){se.opt
- 创建变长数组类型CREATE TYPE varray_type AS VARRAY(2) OF VARCHAR2(50);这个变长数组最多可
- 前一段时间导师叫我写一个批处理的小程序,就是循环修改辐射传输模型软件MODTRAN的输入参数,然后运行MODTRAN软件进行计算,输出需要的
- 据国外媒体报道,相较于IE8浏览器,微软最新一代浏览器IE9的最大改进就是硬件加速HTML5。微软承诺,通过利用IE9中的硬件加速功能,开发