网站建设友链交换,电脑十大免费游戏网站,宁波网站推广外包服务,网站的主题与风格说明文章目录 数据预处理预备知识任务一 数据标准化处理1. 数据准备2. 数据标准化 任务二 数据离差标准化处理任务三 数据二值化处理任务五 独热编码处理对数据进行“离散化处理”#xff08;装箱#xff09;将已经装箱的数据进行OneHotEncoder独热编码 任务六 数据PCA降维处理1.… 文章目录 数据预处理预备知识任务一 数据标准化处理1. 数据准备2. 数据标准化 任务二 数据离差标准化处理任务三 数据二值化处理任务五 独热编码处理对数据进行“离散化处理”装箱将已经装箱的数据进行OneHotEncoder独热编码 任务六 数据PCA降维处理1. 导入iris鸢尾花数据集2. 指定特征数的PCA降维3. 保留方差百分比的PCA降维 项目拓展数据预处理实战——wine酒数据集拆分、标准化和降维处理 数据预处理预备知识
任务一 数据标准化处理
使用StandardScaler进行数据预处理
StandardScaler类是一个用来将数据进行归一化和标准化的类。将数据按其属性按列进行减去平均值和缩放到单位方差来标准化特征。得到的结果是对于每个属性/每列来说所有数据都聚集在0附近标准差为1使得新的X数据集方差为1均值为0在进行标准化的过程中就将训练集的均值和方差当做是总体的均值和方差因此对测试集使用训练集的均值和方差进行预处理。适用范围如果数据的分布本身就服从正态分布就可以用这个方法。
# StandardScaler类的使用
from sklearn.preprocessing import StandardScaler
import numpy as npX np.array([[1., -1., 2.],[2., 0., 0.],[0., 1., -1.]])
# 计算平均值
X_mean X.mean(axis0)
# 计算方差
X_std X.std(axis0)
# 标准化X
X1 (X - X_mean) / X_std # 自己计算# 调用sklearn包的方法
X_scale StandardScaler().fit_transform(X)
# 最终X1与X_scale等价
print(均值方差标准化后的数据\n, X1)
print(StandardScaler标准差标准化后的数据\n, X_scale)1. 数据准备
import matplotlib.pyplot as plt
# 导入数据集生成工具
from sklearn.datasets import make_blobsplt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签
plt.rcParams[axes.unicode_minus] False # 用来正常显示负号# 生成一个样本量为50分类数为1标准差为1的聚类数据集
X, y make_blobs(n_samples50, centers1, cluster_std1, random_state8)
# 用散点图绘制数据点
plt.scatter(X[:, 0], X[:, 1], cblue)
plt.xlabel(特征1)
plt.ylabel(特征2)
plt.title(原始数据)
plt.show()2. 数据标准化
# 导入StandardScaler
from sklearn.preprocessing import StandardScaler# 使用StandardScaler进行数据处理用于将数据转换为均值为 0,标准差为 1 的标准正态分布。
scaler StandardScaler().fit(X)
X_1 scaler.transform(X)
# 也可以用fit_transform()实现
# X_1 StandardScaler().fit_transform(X)# 用散点图绘制经过预处理的数据点
plt.scatter(X_1[:, 0], X_1[:, 1], cblue)
plt.xlabel(特征1)
plt.ylabel(特征2)
plt.title(均值方差标准化数据)
plt.show()任务二 数据离差标准化处理
将每个元素特征feature转换成给定范围的值。MinMaxScaler有一个重要参数feature_range控制数据压缩到的范围默认是[0,1]。适用范围适用于数据在一个范围内分布的情况在不涉及距离度量、协方差计算、数据不符合正态分布的时候可以使用MinMaxScaler。
# 导入MinMaxScaler
from sklearn.preprocessing import MinMaxScaler# 使用MinMaxScaler进行数据预处理
X_2 MinMaxScaler().fit_transform(X)
# 绘制散点图
plt.scatter(X_2[:, 0], X_2[:, 1], cblue)
plt.xlabel(特征1)
plt.ylabel(特征2)
plt.title(离差标准化数据)
plt.show()任务三 数据二值化处理
特征的二值化主要是为了将数据特征转化为boolean变量Binarizer也可以设置一个阈值结果数据值大于阈值的为1小于阈值的为0
import numpy as np
# 导入Binarizer
from sklearn.preprocessing import Binarizerdata np.array([[3, -1.5, 2, -5.4],[0, 4, -0.3, 2.1],[1, 3.3, -1.9, -4.3]])
# 特征二值化
data_binarized Binarizer(threshold1.4).transform(data)
print(二值化处理后的数据: \n, data_binarized)## 任务四 数据归一化处理
- normalizer 数据归一化使每个特征向量的值都缩放到相同的数值范围。归一化的形式有l1,l2范数等
- sklearn.preprocessing.Normalizer(norml2, copyTrue) - norm可以为l1、l2或max默认为l2- 若为l1时样本各个特征值除以各个特征值的绝对值之和- 若为l2时样本各个特征值除以各个特征值的平方之和- 若为max时样本各个特征值除以样本中特征值最大的值# 导入Normalizer
from sklearn.preprocessing import Normalizer# 使用Normalizer进行数据预处理默认为l2范数
# 将所有样本的特征向量转化为欧几里得距离为1通常在只想保留数据特征向量的方向而忽略其数值的时候使用
X_3 Normalizer().fit_transform(X)
# 绘制散点图
plt.figure(figsize(6, 6))
plt.scatter(X_3[:, 0], X_3[:, 1], cblue)
plt.xlim(0, 1.1)
plt.ylim(0, 1.1)
plt.xlabel(特征1)
plt.ylabel(特征2)
plt.title(L2范数的归一化化处理)
plt.show()# 修改norm参数为范数l1
X_4 Normalizer(norml1).fit_transform(X)
# 绘制散点图
plt.figure(figsize(6, 6))
plt.scatter(X_4[:, 0], X_4[:, 1], cblue)
plt.xlim(0, 1.1)
plt.ylim(0, 1.1)
plt.xlabel(特征1)
plt.ylabel(特征2)
plt.title(L1范数的归一化化处理)
plt.show()任务五 独热编码处理
独热编码One-Hot Encoding把特征向量的每个特征与特征的非重复总数相对应通过one-of-k的形式对每个值进行编码如果非重复计数的值是k那么就把这个特征转换为只有一个值是1其他值都是0的k维向量。OneHotEncoder 参数 categories 表示特征的取值该参数取值为list或者默认的’auto’
import numpy as np
# 导入OneHotEncoder
from sklearn.preprocessing import OneHotEncoderdata_type np.array([[0, 1],[1, 3],[2, 0],[1, 2]])
print(data_type)
encoder OneHotEncoder(categoriesauto).fit(data_type)
data_encoded encoder.transform(data_type).toarray()
print(编码后的数据: \n, data_encoded)对数据进行“离散化处理”装箱
numpy.digitize(x, bins, right False)该函数返回输入数组x中每个值所属的数组bins的区间索引。参数 x : numpy数组bins : 一维单调数组必须是升序或者降序right间隔是否包含最右 返回值x在bins中的位置。
import numpy as np# 定义一个随机数的数组
np.random.seed(38)
arr np.random.uniform(-5, 5, size20)
# 设置箱体数为5
bins np.linspace(-5, 5, 6)
# 将数据进行装箱操作
target_bin np.digitize(arr, binsbins)
# 打印装箱数据范围
print(装箱数据范围\n{}.format(bins))
print(\n数据点的特征值\n{}.format(arr))
print(\n数据点所在的箱子\n{}.format(target_bin))将已经装箱的数据进行OneHotEncoder独热编码
from sklearn.preprocessing import OneHotEncoder# 假设 target_bin 是你的目标变量
target_bin target_bin.reshape(-1, 1)# 初始化 OneHotEncoder注意这里不需要设置 sparse 参数 因为sparse参数已经被移除
# onehot OneHotEncoder(sparseFalse, categoriesauto)
onehot OneHotEncoder(categoriesauto)# 拟合并转换数据
onehot.fit(target_bin)
arr_in_bin onehot.transform(target_bin)# 打印结果
print(装箱编码后的数据形态{}.format(arr_in_bin.shape))
print(\n装箱编码后的数据值\n{}.format(arr_in_bin)) 任务六 数据PCA降维处理
PCA通过计算协方差矩阵的特征值和相应的特征向量在高维数据中找到最大方差的方向并将数据映射到一个维度不大于原始数据的新的子空间中。
1. 导入iris鸢尾花数据集
# 导入iris鸢尾花数据集
from sklearn.datasets import load_iris# 加载iris数据集
iris load_iris()
X iris.data
print(iris数据集的维度为, X.shape)print(iris数据集的前5行数据为\n, X[:5])2. 指定特征数的PCA降维
# 导入PCA
from sklearn.decomposition import PCA# 指定保留的特征数为3
pca_num PCA(n_components3)
# 训练PCA模型
pca_num.fit(X)
# 对样本数据进行PCA降维
X_pca1 pca_num.transform(X)
# 查看降维结果
print(iris数据集进行指定特征数的降维后的维度为, X_pca1.shape)
# 查看降维后的前5行数据
print(指定特征数的降维后iris数据集的前5行数据为\n, X_pca1[:5])# 查看原始特征与PCA主成分之间的关系
import numpy as npprint(指定特征数的降维后的最大方差的成分)
for i in range(pca_num.components_.shape[0]):arr np.around(pca_num.components_[i], 2)print(component{0}: {1}.format((i 1), [x for x in arr]))# 查看降维后的各主成分的方差值和方差占比
var np.around(pca_num.explained_variance_, 2)
print(指定特征数的降维后的各主成分的方差为, [x for x in var])
var_ratio np.round(pca_num.explained_variance_ratio_, 2)
print(指定特征数的降维后的各主成分的方差百分比为, [x for x in var_ratio])3. 保留方差百分比的PCA降维
# 指定保留的方差百分比为0.95
pca_per PCA(n_components0.95)
# 训练PCA模型
pca_per.fit(X)
# 对样本数据进行PCA降维
X_pca2 pca_per.transform(X)
# 查看降维结果
print(iris数据集进行指定方差百分比的降维后的维度为, X_pca2.shape)
# 查看降维后的前5行数据
print(指定方差百分比的降维后iris数据集的前5行数据为\n, X_pca2[:5])# 查看原始特征与PCA主成分之间的关系
print(指定方差百分比降维后的最大方差的成分)
for i in range(pca_per.components_.shape[0]):arr np.round(pca_per.components_[i], 2)print(component{0}: {1}.format((i 1), [x for x in arr]))# 查看降维后的各主成分的方差值和方差占比
var np.around(pca_per.explained_variance_, 2)
print(指定方差百分比的降维后的各主成分的方差为, [x for x in var])
var_ratio np.round(pca_per.explained_variance_ratio_, 2)
print(指定方差百分比的降维后的各主成分的方差百分比为, [x for x in var_ratio])项目拓展
数据预处理实战——wine酒数据集拆分、标准化和降维处理
# 1. 导入wine酒数据集
# 导入wine酒模块
from sklearn.datasets import load_wine
import numpy as np# 加载wine数据集
wine load_wine()
# “input”是特征数据
X wine.data
# “target”是目标变量数据(酒的类别标签)
y wine.target
# 查看特征数据的维度
print(wine数据集的维度为, X.shape)
# 查看酒的类别
print(wine数据集的类别标签为, np.unique(y))# 2. 将wine数据集划分为训练集和测试集
# 导入数据集拆分工具
from sklearn.model_selection import train_test_split# 将数据集拆分为训练数据集和测试数据集
X_train, X_test, y_train, y_test train_test_split(X, y, random_state8)# 输出训练数据集中特征向量的维度
print(训练集数据维度, X_train.shape)
# 输出训练数据集中目标标签的维度
print(训练集标签维度, y_train.shape)
# 输出测试数据集中特征向量的维度
print(测试集数据维度, X_test.shape)
# 输出测试数据集中特征向量的维度
print(测试集标签维度, y_test.shape)# 3. 对数据集进行标准化处理
# 导入StandardScaler
from sklearn.preprocessing import StandardScaler
# 对训练集进行拟合生成规则
scaler StandardScaler().fit(X_train)
# 对训练集数据进行转换
X_train_scaled scaler.transform(X_train)
# 对测试集数据进行转换
X_test_scaled scaler.transform(X_test)print(标准化前训练集数据的最小值和最大值{0}, {1}.format(X_train.min(), X_train.max()))
print(标准化后训练集数据的最小值和最大值{0:.2f}, {1:.2f}.format(X_train_scaled.min(), X_train_scaled.max()))
print(标准化前测试集数据的最小值和最大值{0}, {1}.format(X_test.min(), X_test.max()))
print(标准化后测试集数据的最小值和最大值{0:.2f}, {1:.2f}.format(X_test_scaled.min(), X_test_scaled.max()))# 4. 对数据进行降维处理
# 导入PCA
from sklearn.decomposition import PCA
# 设置主成分数量为2
pca PCA(n_components2)
# 对标准化后的训练集进行拟合生成规则
pca.fit(X_train_scaled)
# 对标准化后的训练集数据进行PCA降维
X_train_pca pca.transform(X_train_scaled)
# 对标准化后的测试集数据进行PCA降维
X_test_pca pca.transform(X_test_scaled)print(降维后训练集的维度为, X_train_pca.shape)
print(降维后测试集的维度为, X_test_pca.shape)# 5. wine数据集可视化
import numpy as np
import matplotlib.pyplot as pltplt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签
plt.rcParams[axes.unicode_minus] False # 用来正常显示负号# 绘制wine数据集图形
plt.figure(figsize(8, 6))
for i, color, name in zip(np.unique(y), [r,g,b], wine.target_names):# 绘制降维后的训练集样本图形plt.scatter(X_train_pca[y_traini,0], X_train_pca[y_traini,1],ccolor, markero, label类别name训练集)# 绘制降维后的测试集样本图形plt.scatter(X_test_pca[y_testi,0], X_test_pca[y_testi,1],ccolor, marker*, label类别name测试集)plt.xlabel(成分1)
plt.ylabel(成分2)
plt.legend(locbest)
plt.show()