机器学习sklearn(14)PCA降维

降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。在原始的高维空间中,包含冗余信息以及噪声信息,在实际应用中例如图像识别中会造成误差,降低准确率;而通过降维,可以减少信息的冗余、提高识别等的精度,还可以寻求数据内部的本质结构特征。

降维的目的 

  1. 特征选择:选择重要的特征子集,删除其余特征; 
  2. 特征提取:由原始特征形成的较少的新特征。

降维的作用:

  1. 降低时间的复杂度和空间复杂度 
  2. 节省了提取不必要特征的开销 
  3. 去掉数据集中夹杂的噪音 
  4. 较简单的模型在小数据集上有更强的鲁棒性 
  5. 当数据能有较少的特征进行解释,我们可以更好地解释数据
  6. 实现数据的可视化 

降维的本质:
学习一个映射函数f:X到Y。(X是原始数据点的表达,目前最多的是用向量来表示,Y是数据点映射后的低维向量表达。)f可能是:显示的、隐式的、线性的、非线性的。

主成分分析(PCA)是另一种常用的数据降维方法,它属于无监督学习算法,即在算法训练时,我们不需要知道样本对应的类别。
在映射函数f:X到Y中,我们希望样本点在每一维上的投影点尽可能分散。这种分散程度可以用方差来度量。我们希望降维后的各字段都不存在相关性,而协方差正是用来度量两个随机变量相关性的参数,协方差为0的两个随机变量称为不相关。至此我们得到了PCA的目标:将一组n维向量降为k维(0<k<n),其目标是选择k个单位正交基,使得原始数据在变换到这组基上后,各字段两两协方差为0,而各字段的方差尽可能大。

PCA算法步骤总结如下:

将原始样本数据按列排成矩阵X
X的每一行(代表一个属性字段)进行0均值化处理。
求出协方差矩阵C=\frac{1}{m}XX^{T}的特征值及对应的特征向量。
将特征向量对应特征值从大到小按列排列,取前k列组成矩阵W
Y=W^{T}X即为降维后的数据。

import pandas as pd
f = r'C:\Users\Machine Learning\wine.txt'
df_wine = pd.read_csv(f, encoding='ANSI', header=None)
print(df_wine.head())

 0      1     2     3     4    5     6     7     8     9     10    11    12  \
0   1  14.23  1.71  2.43  15.6  127  2.80  3.06  0.28  2.29  5.64  1.04  3.92   
1   1  13.20  1.78  2.14  11.2  100  2.65  2.76  0.26  1.28  4.38  1.05  3.40   
2   1  13.16  2.36  2.67  18.6  101  2.80  3.24  0.30  2.81  5.68  1.03  3.17   
3   1
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基于机器学习线性回归模型的案例,包含多元线性回归和PCA降维: ## 数据集 我们将使用一个来自UCI Machine Learning Repository的数据集,该数据集包含了波士顿地区不同位置房屋的房价和相关信息。数据集中包含13个特征变量和1个目标变量(房价)。这个数据集是一个经典的回归问题,我们将使用多元线性回归模型来预测房价。 ## 数据预处理 首先,我们需要将数据集读入到程序中,并对数据进行预处理。我们使用pandas库来读取和处理数据: ```python import pandas as pd # 读取数据 df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data', header=None, sep='\s+') df.columns = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV'] # 查看数据 print(df.head()) ``` 我们可以看到,数据集中的每个特征都有不同的取值范围和单位,因此我们需要对数据进行标准化处理。我们使用sklearn库中的StandardScaler类来进行标准化处理: ```python from sklearn.preprocessing import StandardScaler X = df.iloc[:, :-1].values y = df['MEDV'].values # 标准化处理 sc = StandardScaler() X = sc.fit_transform(X) y = sc.fit_transform(y.reshape(-1, 1)) ``` ## 多元线性回归模型 接下来,我们使用多元线性回归模型来训练数据集,并预测房价。我们使用sklearn库中的LinearRegression类来实现多元线性回归模型: ```python from sklearn.linear_model import LinearRegression # 训练模型 regressor = LinearRegression() regressor.fit(X, y) # 预测房价 X_test = sc.transform([[0.03237, 0.0, 2.18, 0, 0.458, 6.998, 45.8, 6.0622, 3, 222, 18.7, 394.63, 2.94]]) y_pred = regressor.predict(X_test) # 将预测结果转换为原始值 y_pred = sc.inverse_transform(y_pred) print('预测房价为:{:.2f}万美元'.format(y_pred[0][0])) ``` ## PCA降维 接下来,我们将使用PCA降维来简化特征空间并提高模型训练的效率。我们使用sklearn库中的PCA类来实现PCA降维: ```python from sklearn.decomposition import PCA # PCA降维 pca = PCA(n_components=2) X_pca = pca.fit_transform(X) # 训练模型 regressor_pca = LinearRegression() regressor_pca.fit(X_pca, y) # 预测房价 X_test_pca = pca.transform([[0.03237, 0.0, 2.18, 0, 0.458, 6.998, 45.8, 6.0622, 3, 222, 18.7, 394.63, 2.94]]) y_pred_pca = regressor_pca.predict(X_test_pca) # 将预测结果转换为原始值 y_pred_pca = sc.inverse_transform(y_pred_pca) print('预测房价为:{:.2f}万美元'.format(y_pred_pca[0][0])) ``` ## 结果分析 接下来,我们将比较使用多元线性回归模型和PCA降维后的多元线性回归模型的预测结果: ```python print('多元线性回归模型预测房价为:{:.2f}万美元'.format(y_pred[0][0])) print('PCA降维后的多元线性回归模型预测房价为:{:.2f}万美元'.format(y_pred_pca[0][0])) ``` 我们可以看到,使用PCA降维后的多元线性回归模型的预测结果与使用多元线性回归模型的预测结果相同,但是PCA降维后的特征空间更简化,模型训练的效率更高。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值