主成分分析法拆分训练集与测试集,进行模型的预测和训练 案例及代码实现
时间: 2024-05-13 08:16:21 浏览: 6
主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维方法,可以用于特征提取、数据可视化和噪声滤除等任务。PCA通过将原始数据在新的坐标系下进行投影,得到一组新的特征向量,这些特征向量是原始数据中最具有代表性的方向,可以用较少的维度来描述原始数据,从而达到降维的目的。
在进行PCA降维时,我们通常需要将数据集拆分为训练集和测试集,以便在训练集上训练模型,在测试集上进行模型的预测和评估。下面是一个简单的案例和代码实现,演示如何使用主成分分析方法拆分训练集和测试集,并进行模型的训练和预测。
案例:使用PCA降维对手写数字进行分类
数据集:sklearn自带的手写数字数据集,包含1797张8x8像素大小的数字图片。
步骤:
1.导入数据集和所需库
```python
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
import numpy as np
import matplotlib.pyplot as plt
digits = load_digits() # 导入数据集
X = digits.data # 图像数据
y = digits.target # 图像标签
```
2.拆分训练集和测试集
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
```
3.进行PCA降维
```python
pca = PCA(n_components=0.95, random_state=42) # 保留95%的方差
X_train_pca = pca.fit_transform(X_train) # 在训练集上进行PCA降维
X_test_pca = pca.transform(X_test) # 在测试集上进行PCA降维
```
4.训练KNN分类器
```python
knn = KNeighborsClassifier() # 创建KNN分类器
knn.fit(X_train_pca, y_train) # 在降维后的训练集上训练模型
```
5.在测试集上进行预测和评估
```python
y_pred = knn.predict(X_test_pca) # 在降维后的测试集上进行预测
accuracy = accuracy_score(y_test, y_pred) # 计算预测准确率
print('Accuracy:', accuracy)
```
6.可视化降维后的数据
```python
plt.figure(figsize=(10, 6))
plt.scatter(X_train_pca[:, 0], X_train_pca[:, 1], c=y_train, cmap='viridis')
plt.xlabel('First Principal Component')
plt.ylabel('Second Principal Component')
plt.colorbar()
plt.show()
```
完整代码如下:
```python
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
import numpy as np
import matplotlib.pyplot as plt
digits = load_digits() # 导入数据集
X = digits.data # 图像数据
y = digits.target # 图像标签
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 拆分训练集和测试集
pca = PCA(n_components=0.95, random_state=42) # 保留95%的方差
X_train_pca = pca.fit_transform(X_train) # 在训练集上进行PCA降维
X_test_pca = pca.transform(X_test) # 在测试集上进行PCA降维
knn = KNeighborsClassifier() # 创建KNN分类器
knn.fit(X_train_pca, y_train) # 在降维后的训练集上训练模型
y_pred = knn.predict(X_test_pca) # 在降维后的测试集上进行预测
accuracy = accuracy_score(y_test, y_pred) # 计算预测准确率
print('Accuracy:', accuracy)
plt.figure(figsize=(10, 6)) # 可视化降维后的数据
plt.scatter(X_train_pca[:, 0], X_train_pca[:, 1], c=y_train, cmap='viridis')
plt.xlabel('First Principal Component')
plt.ylabel('Second Principal Component')
plt.colorbar()
plt.show()
```