机器学习Python实践-阅读笔记Ⅱ

152 阅读6分钟

机器学习Python实践总共有22个章节(Ch1-22)

本文主要介绍的是部分三

部分三 数据准备(Ch8-9)

特征工程是最基本和重要的!!!

数据预处理:需要对数据本身的特性进行

  1. 其中有缺失值的需要填充

  2. 无效数据要剔除

  3. 有冗余维的要选择

数据预处理三个步骤:

  • 数据的准备
  • 数据的转换(1.调整数据尺度(Rescale Data) 2.正态化数据(Standardize Data) 3.标准化数据(Normalize Data) 4.二值数据(Binarize Data)
  • 数据的输出

处理数据的流程:

  1. 导入数据 2.按照算法的输入和输出整理数据 3.格式化输入数据 4. 总结显示数据的变化

  • 格式化数据两种方法:

  1. 适合和多重变换(Fit and Multiple Transform)——①调用fit()函数准备数据转换的参数,②transform()函数来数据预处理

  2. 适合和变换组合(Combined Fit-and-Transform)

数据的转换

1.调整数据尺度(Rescale Data)

将数据的所有属性标准化,将数据转换成0~1之间的值(对于梯度下降很有用,回归算法、神经网络算法和K近邻算法的准确度提高☝️很有用)——scikit-learn中常用MinMaxScaler类来调整数据尺度。

统计学中,按照对事物描述的精确度分为: (从低到高划分)

  1. 尺度(最低):按事物的类别属性进行分类

  2. 尺度:对事物的等级或顺序的一种测度,可以比较优劣或排序

  3. 尺度:区分为类别之后再讲不同的类别进行排序,准确指出类别之间的差距(定类尺度再定序尺度的集合)

  4. 尺度:(定距尺度的update)在定距尺度基础上,有一个固定的绝对“零”点。 一般定距尺度和定比尺度:都是对类别+次序的测度,所以使用时不做严格区分。

image.png

# 调整数据尺度(0..)
from pandas import read_csv
from numpy import set_printoptions
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为属性,Y为class类别(X,Y都跟array一样为二维数组)
X = array[:, 0:8]
Y = array[:, 8]

scaler = MinMaxScaler(feature_range=(0, 1))

# 数据转换
rescaledX = scaler.fit_transform(X)

# 设定数据的打印格式
set_printoptions(precision=3)
print(f"经过调整X的数据尺度,使得数据均在0和1之间:\n{rescaledX}")
#rescaledX的行数和列数
print(rescaledX.shape)

输出结果:

image.png

2.正态化数据(Standardize Data)

假定数据符合高斯分布的算法输入——使用scikit-learn中常用StandardScaler类来进行正态化数据处理。

  • 这些算法有:线性回归,逻辑回归和线性判别分析等!
代码只有下图红框处的不同!

image.png 输出结果:

image.png

3.标准化数据(Normalize Data)

适合用于稀疏数据(具有很多0的数据)——使用scikit-learn中常用Normalizer类

  • 处理流程为:将每一行的数据距离处理成1,即归一化处理~
代码只有下图红框处的不同!

image.png 输出结果:

image.png

4.二值数据(Binarize Data)

用于生成明确值 or 特征工程增加属性——使用scikit-learn中常用Binarizer类

  • 处理流程为:设定某个阈值,大于阈值的设为1,小于阈值的为0,转化成二值——这个过程称之为:二分数据 or 阈值转换。
代码只有下图红框处的不同!

image.png 输出结果:

image.png

数据特征选定——十分重要!

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已!

特征工程的本质:一项工程活动,目的:最大限度地从原始数据中提取合适的特征,以供算法和模型使用。

特征处理特征工程的核心部分。 scikit-learn 提供了较为完整的特征处理方法,包括数据预处理、特征选择、降维等。 scikit-learn四个数据特征选择的方法:

  1. 单变量特征选定
  2. 递归特征消除
  3. 主要成分分析(PCA)
  4. 特征的重要性
  • 特征选定的作用:1.降低数据的拟合度(减少冗余的数据) 2.提高算法的精度(减少误导的数据,误导的数据会对预测新数据产生干扰(尤其是线性相关算法,线性回归算法和逻辑回归算法)) 3.减少训练时间(越少的数据,训练时间越短)

1.单变量特征选定

单变量的特征选定(univariate-selection)

  • scikit-learn中提供了SelectKBest类,利用卡方检验(或者其他统计方法,e.g.相关系数等 可以作为score_func来进行特征选定)选择对结果影响最大的数据特征。
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2

test = SelectKBest(score_func=chi2,k=4)#chi2为卡方检验,k=4即选择4个对结果影响最大的特征

2.递归特征消除

递归特征消除(recursive feature elimination-selection)

  • scikit-learn中提供了RFE类,选择一个基模型(比如:线性相关算法中的逻辑回归)进行多轮训练,经过每一轮基模型的accuracy来选出对结果影响最大的数据特征。
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
rfe = RFE(model,n_features_to_select=3)#选出3个对结果影响最大的特征

3.主要成分分析(PCA)

主要成分分析(principle component analysis-selection)image.png PCA降维具体操作:

image.png 常见的数学降维方法(即使用线性代数来转换压缩数据):主要成分分析(PCA) 还有 线性判别分析(LDA)

  • PCA:为了让映射后的样本具有更大的发散性——无监督的降维方法
  • LDA:为了让映射后的样本具有更好的分类性——有监督的降维方法

  • scikit-learn中提供了PCA类,在聚类算法中,主要使用的还是PCA对数据进行降维,以利于数据的简化分析和可视化。
from sklearn.decomposition import PCA

pca = PCA(n_components=3)#最终将到特征维度为3

4.特征重要性

使用集成算法中的袋装算法,能够计算数据特征的重要性。

常见的袋装算法有:

  1. 袋装决策树算法(Bagged Decision Tree)
  2. 随机森林算法(Random Forest)
  3. 极端随机数算法
  • scikit-learn中提供了ExtraTreesClassifier类对特征的重要性进行计算,来选择对结果影响最大的数据特征。
from sklearn.ensemble import ExtraTreesClassifier

model = ExtraTreesClassifier()
fit = model.fit(X, Y)
print(fit.feature_importances_)

计算出的是8个特征的得分 image.png