数据预处理及数据特征选择

1 数据预处理

数据预处理大致分为三个步骤:数据的准备、数据的转换、数据的输出。

1.1 格式化数据

scikit-learn提供了适合和多重变换(Fit and Multiple Transform)和适合和变换组合(Combined Fit-and-Transform)两种标准的格式化数据的方法。推荐优先使用适合和多重变换(Fit and Multiple Transform)方法。

1.2 调整数据尺度

# # # 调整数据尺度(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 = array[:, 0:8]
Y = array[:, 8]
transformer = MinMaxScaler(feature_range=(0, 1))
# 数据转换
newX = transformer.fit_transform(X)
# 设定数据的打印格式
set_printoptions(precision=3)
print(newX)

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

1.3 正态化数据

"""正态化数据"""
from pandas import read_csv
from numpy import set_printoptions
from sklearn.preprocessing import StandardScaler

# 导入数据
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]
transformer = StandardScaler().fit(X)
# 数据转换
newX = transformer.transform(X)
# 设定数据的打印格式
set_printoptions(precision=3)
print(newX)

注:正态化数据是有效的处理符合高斯分布的数据的手段,输出结果以0为中位数,方差为1,并作为假定数据符合高斯分布的算法的输入。

1.4 标准化数据

"""标准化数据"""
from pandas import read_csv
from numpy import set_printoptions
from sklearn.preprocessing import Normalizer

# 导入数据
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]
transformer = Normalizer().fit(X)
# 数据转换
newX = transformer.transform(X)
# 设定数据的打印格式
set_printoptions(precision=3)
print(newX)

注:标准化数据(Normalize Data)处理是将每一行的数据的距离处理成1的数据又叫作“归一元”处理,适合处理稀疏数据,归一元处理的数据对使用权重输入的神经网络和使用距离的K近邻算法的准确度的提升有显著作用。

1.5 二值数据

"""二值数据"""
from pandas import read_csv
from numpy import set_printoptions
from sklearn.preprocessing import Binarizer

# 导入数据
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]
transformer = Binarizer(threshold=0.0).fit(X)
# 数据转换
newX = transformer.transform(X)
# 设定数据的打印格式
set_printoptions(precision=3)
print(newX)

注:二值数据(Binarize Data)是使用值将数据转化为二值,大于阈值的设置为1,小于阈值的设置为0。这个过程被叫做二分数据或阈值转换。

2 数据特征选定

2.1 特征选定

特征选定是一个流程,能够选择有助于提高预测结果准确度的特征数据,或者有助于发现我们感兴趣的输出结果的特征数据。如果数据中包含无关的特征属性,会降低算法的准确度,对预测新数据造成干扰,尤其是线性相关算法。因此,在开始建立模型之前,执行特征选定有助于:

  • 降低数据的拟合度:较少的冗余数据,会使算法得出结论的机会更大。
  • 提高算法精度:较少的误导数据,能够提高算法的准确度。
  • 减少训练所需要的时间:越少的数据,训练模型所需要的时间越少。

2.2 单变量特征选定

"""通过卡方检验选定数据特征"""
from pandas import read_csv
from numpy import set_printoptions
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2

# 导入数据
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)

注:统计分析可以用来分析选择对结果影响最大的数据特征。经典的卡方检验的是检验定性自变量对定性因变量的相关性的方法。卡方检验就是统计样本的实际观测值与理论推断值之前的偏离程度,偏离程度决定了卡方值的大小,卡方值越大,越不符合;卡方值越小,偏差越小,越趋于符合;若两个值完全相等,卡方值就为0,表明理论值完全符合。

2.3 递归特征消除

"""通过递归消除来选定特征"""
from pandas import read_csv
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

# 导入数据
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]
# 特征选定
model = LogisticRegression()
rfe = RFE(estimator=model, n_features_to_select=3)
fit = rfe.fit(X, Y)
print("特征个数:")
print(fit.n_features_)
print("被选定的特征:")
print(fit.support_)
print("特征排名:")
print(fit.ranking_)

注:递归特征消除(RFE)使用一个基模型来进行多伦训练,每轮训练后消除若干权值系数的特征,再基于新的特征集进行下一轮训练。通过每一个基模型的精度,找到对最终的预测结果影响最大的数据特征。在scikit-learn文档中有更多的关于递归特征消除的描述。

2.4 主要成分分析

from pandas import read_csv
from sklearn.decomposition import PCA

# 导入数据
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]
# 特征选定
pca = PCA(n_components=3)
fit = pca.fit(X)
print("解释方差:%s" % fit.explained_variance_ratio_)
print(fit.components_)

注:主要成分分析(PCA)是使用线性代数来转换压缩数据,通常被称作数据降维(PCA是一种无监督的降维方法)。常见的降维方法除了主要成分分析(PCA),还有线性判别分析(LDA),它本身也是一个分类模型。

2.5 特征重要性

from pandas import read_csv
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]
# 特征选定
model = ExtraTreesClassifier()
fit = model.fit(X, Y)
print(fit.feature_importances_)

注:袋装决策树算法(Bagged Decision Trees)、随机森林算法和极端随机树算法都可以用来计算数据特征的重要性,这三个算法都是集成算法中的袋装算法。

参考资料

[1] 魏贞原.2018.机器学习:Python实践[M].北京:电子工业出版社scikit-学习scikit-学习scikit-学习

[2] scikit-learn: machine learning in Python — scikit-learn 1.0.2 documentation

[3] Python - 回归(线性回归、RFE、LASSO 和 岭回归+K折交叉验证)_Alvin AI Blog-CSDN博客_python rfe

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值