基于《机器学习-Python实践》学习笔记——数据准备和特征选取

本文介绍了机器学习中数据预处理的步骤,包括数据格式化、调整数据尺度、正态化和标准化。同时探讨了特征选择的方法,如卡方检验、递归特征消除法和主成分分析,旨在提升模型性能。
摘要由CSDN通过智能技术生成

数据预处理

  1. 数据格式化
    先用fit()函数准备数据转换的参数,再用transform函数进行预处理。

fit(): 简单来说,就是求得训练集X的均值,方差,最大值,最小值,这些训练集X固有的属性。

transform(): 在fit的基础上,进行标准化,降维,归一化等操作(看具体用的是哪个工具,如PCA,StandardScaler等)。

fit_transform(): fit_transform是fit和transform的组合,既包括了训练又包含了转换。
transform()和fit_transform()二者的功能都是对数据进行某种统一处理(比如标准化~N(0,1),将数据缩放(映射)到某个固定区间,归一化,正则化等)

具体看实际问题应用。

  1. 调整数据尺度
    即对数据的范围进行大小缩放。通过minmaxscaler实现
# 调整数据尺度(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]
scaler = MinMaxScaler(feature_range=(0, 1))
# 数据转换
rescaledX = scaler.fit_transform(X)
# 设定数据的打印格式
set_printoptions(precision=3)
print(rescaledX)
  1. 正态化数据
    假定数据服从高斯分布,进行标准化。通过Normalizer().fit(X)实现
# 标准化数据
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]
scaler = Normalizer().fit(X)
# 数据转换
rescaledX = scaler.transform(X)
# 设定数据的打印格式
set_printoptions(precision=3)
print(rescaledX)
  1. 标准化数据
    将每一行的数据的距离处理成1:
# 标准化数据
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]
scaler = Normalizer().fit(X)
# 数据转换
rescaledX = scaler.transform(X)
# 设定数据的打印格式
set_printoptions(precision=3)
print(rescaledX)

  1. 二值化数据
    大于阈值设置为1,小于阈值设置为0
# 二值数据
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]
transform = Binarizer(threshold=0.0).fit(X)
# 数据转换
newX = transform.transform(X)
# 设定数据的打印格式
set_printoptions(precision=3)
print(newX)

数据特征选取

  1. 单变量特征选定
    通过卡方检验来判定自变量对因变量的相关性。
    卡方检验就是样本的实际观察值与理论推断值之前的偏离程度,
    卡方值越大,偏离值越大,越不符合;
    卡方值越小,偏离值越小,越符合。
# 通过卡方检验选定数据特征
from csv import reader
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]#第9列,即数据的标签
# 特征选定
test = SelectKBest(score_func=chi2, k=4)#根据给定的选择器chi2,选择出前k个与标签最相关的特征。
fit = test.fit(X, Y)
set_printoptions(precision=3)
print(fit.scores_)#输出8个组每组计算出的卡方值
features = fit.transform(X)
print(features)#输出最相关的前k个特征卡方值

  1. 递归特征消除法
    通过一个基模型进行多轮训练,每轮训练后消除若干权值系数的特征。

  2. 主成分分析
    PCA老熟人了,通过矩阵变换进行降维。因为我的凸优化大作业就是PCA+SVM,专门写了一贴做这个,详见那篇博文。
    a. 设有M个N维数据:
    b. 将原始数据按列组成N行M列矩阵X
    c. 将X的每一行进行零均值化,即减去每一行的均值
    d. 求出X的协方差矩阵C
    e. 求出协方差矩阵C的特征值及对应的特征向量,C的特征值就是Y的每维元素的方差,也是D的对角线元素,从大到小沿对角线排列构成D。
    f. 将特征向量按对应特征值大小从上到下按行排列成矩阵,根据实际业务场景,取前R行组成矩阵P
    g. Y=PX即为降到R维后的目标矩阵

# 通过主要成分分析选定数据特征
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_)
  1. 特征重要性
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值