Python机器学习入门(三)数据准备

目录
  • 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]

总结

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

到此这篇关于Python机器学习(三)数据准备的文章就介绍到这了,更多相关Python机器学习内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python机器学习入门(一)序章

    目录 前言 写在前面 1.什么是机器学习? 1.1 监督学习 1.2无监督学习 2.Python中的机器学习 3.必须环境安装 Anacodna安装 总结 前言 每一次变革都由技术驱动.纵观人类历史,上古时代,人类从采集狩猎社会,进化为农业社会:由农业社会进入到工业社会:从工业社会到现在信息社会.每一次变革,都由新技术引导. 在历次的技术革命中,一个人.一家企业,甚至一个国家,可以选择的道路只有两条:要么加入时代的变革,勇立潮头:要么徘徊观望,抱憾终生. 要想成为时代弄潮儿,就要积极拥抱这次智能

  • Python机器学习入门(六)优化模型

    目录 1.集成算法 1.1袋装算法 1.1.1袋装决策树 1.1.2随机森林 1.1.3极端随机树 1.2提升算法 1.2.1AdaBoost 1.2.2随机梯度提升 1.3投票算法 2.算法调参 2.1网络搜索优化参数 2.2随机搜索优化参数 总结 有时提升一个模型的准确度很困难.你会尝试所有曾学习过的策略和算法,但模型正确率并没有改善.这时你会觉得无助和困顿,这也正是90%的数据科学家开始放弃的时候.不过,这才是考验真正本领的时候!这也是普通的数据科学家和大师级数据科学家的差距所在. 1.集

  • Python机器学习入门(二)数据理解

    目录 1.数据导入 1.1使用标准Python类库导入数据 1.2使用Numpy导入数据 1.3使用Pandas导入数据 2.数据理解 2.1数据基本属性 2.1.1查看前10行数据 2.1.2查看数据维度,数据属性和类型: 2.1.3查看数据描述性统计 2.2数据相关性和分布分析 2.2.1数据相关矩阵 2.2.2数据分布分析 3.数据可视化 3.1单一图表 3.1.1直方图 3.1.2密度图 3.1.3箱线图 3.2多重图表 3.2.1相关矩阵图 3.2.2散点矩阵图 总结 统计学是什么?概

  • Python机器学习入门(四)选择模型

    目录 1.数据分离与验证 1.1分离训练数据集和评估数据集 1.2K折交叉验证分离 1.3弃一交叉验证分离 1.4重复随机分离评估数据集与训练数据集 2.算法评估 2.1分类算法评估 2.1.1分类准确度 2.1.2分类报告 2.2回归算法评估 2.2.1平均绝对误差 2.2.2均方误差 2.2.3判定系数() 总结 1.数据分离与验证 要知道算法模型对未知的数据表现如何,最好的评估办法是利用已经明确知道结果的数据运行生成的算法模型进行验证.此外还可以使用新的数据来评估算法模型. 在评估机器学习

  • Python机器学习入门(五)算法审查

    目录 1.审查分类算法 1.1线性算法审查 1.1.1逻辑回归 1.1.2线性判别分析 1.2非线性算法审查 1.2.1K近邻算法 1.2.2贝叶斯分类器 1.2.4支持向量机 2.审查回归算法 2.1线性算法审查 2.1.1线性回归算法 2.1.2岭回归算法 2.1.3套索回归算法 2.1.4弹性网络回归算法 2.2非线性算法审查 2.2.1K近邻算法 2.2.2分类与回归树 2.2.3支持向量机 3.算法比较 总结 程序测试是展现BUG存在的有效方式,但令人绝望的是它不足以展现其缺位. --

  • Python机器学习入门(三)数据准备

    目录 1.数据预处理 1.1调整数据尺度 1.2正态化数据 1.3标准化数据 1.4二值数据 2.数据特征选定 2.1单变量特征选定 2.2递归特征消除 2.3数据降维 2.4特征重要性 总结 特征选择时困难耗时的,也需要对需求的理解和专业知识的掌握.在机器学习的应用开发中,最基础的是特征工程. --吴恩达 1.数据预处理 数据预处理需要根据数据本身的特性进行,有缺失的要填补,有无效的要剔除,有冗余维的要删除,这些步骤都和数据本身的特性紧密相关. 1.1调整数据尺度 如果数据的各个属性按照不同的

  • Python机器学习入门(三)之Python数据准备

    目录 1.数据预处理 1.1调整数据尺度 1.2正态化数据 1.3标准化数据 1.4二值数据 2.数据特征选定 2.1单变量特征选定 2.2递归特征消除 2.3数据降维 2.4特征重要性 总结 特征选择时困难耗时的,也需要对需求的理解和专业知识的掌握.在机器学习的应用开发中,最基础的是特征工程. --吴恩达 1.数据预处理 数据预处理需要根据数据本身的特性进行,有缺失的要填补,有无效的要剔除,有冗余维的要删除,这些步骤都和数据本身的特性紧密相关. 1.1调整数据尺度 如果数据的各个属性按照不同的

  • Python机器学习入门(五)之Python算法审查

    目录 1.审查分类算法 1.1线性算法审查 1.1.1逻辑回归 1.1.2线性判别分析 1.2非线性算法审查 1.2.1K近邻算法 1.2.2贝叶斯分类器 1.2.3分类与回归树 1.2.4支持向量机 2.审查回归算法 2.1线性算法审查 2.1.1线性回归算法 2.1.2岭回归算法 2.1.3套索回归算法 2.1.4弹性网络回归算法 2.2非线性算法审查 2.2.1K近邻算法 2.2.2分类与回归树 2.2.3支持向量机 3.算法比较 总结 程序测试是展现BUG存在的有效方式,但令人绝望的是它

  • Python数据分析入门之数据读取与存储

    一.图示 二.csv文件 1.读取csv文件read_csv(file_path or buf,usecols,encoding):file_path:文件路径,usecols:指定读取的列名,encoding:编码 data = pd.read_csv('d:/test_data/food_rank.csv',encoding='utf8') data.head() name num 0 酥油茶 219.0 1 青稞酒 95.0 2 酸奶 62.0 3 糌粑 16.0 4 琵琶肉 2.0 #指

  • python机器学习算法与数据降维分析详解

    目录 一.数据降维 1.特征选择 2.主成分分析(PCA) 3.降维方法使用流程 二.机器学习开发流程 1.机器学习算法分类 2.机器学习开发流程 三.转换器与估计器 1.转换器 2.估计器 一.数据降维 机器学习中的维度就是特征的数量,降维即减少特征数量.降维方式有:特征选择.主成分分析. 1.特征选择 当出现以下情况时,可选择该方式降维: ①冗余:部分特征的相关度高,容易消耗计算性能 ②噪声:部分特征对预测结果有影响 特征选择主要方法:过滤式(VarianceThreshold).嵌入式(正

随机推荐