对automobile数据集实现PCA编码,并用matplotlib实现PCA主特征数据显示
时间: 2024-04-28 17:19:25 浏览: 105
好的,以下是一个Python代码实现对automobile数据集实现PCA编码,并用matplotlib实现PCA主特征数据显示的方法。
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 加载automobile数据集
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/autos/imports-85.data', header=None)
# 设置列名
columns = ['symboling', 'normalized_losses', 'make', 'fuel_type', 'aspiration', 'num_of_doors', 'body_style',
'drive_wheels', 'engine_location', 'wheel_base', 'length', 'width', 'height', 'curb_weight',
'engine_type', 'num_of_cylinders', 'engine_size', 'fuel_system', 'bore', 'stroke', 'compression_ratio',
'horsepower', 'peak_rpm', 'city_mpg', 'highway_mpg', 'price']
data.columns = columns
# 选取数值型特征
numeric_features = ['normalized_losses', 'wheel_base', 'length', 'width', 'height', 'curb_weight',
'engine_size', 'bore', 'stroke', 'compression_ratio', 'horsepower', 'peak_rpm', 'city_mpg', 'highway_mpg', 'price']
numeric_data = data[numeric_features]
# 处理缺失值
numeric_data = numeric_data.replace('?', np.nan)
numeric_data = numeric_data.dropna().astype(float)
# 计算数据的均值
mean = np.mean(numeric_data, axis=0)
# 中心化数据
centered_data = numeric_data - mean
# 计算协方差矩阵
covariance_matrix = np.cov(centered_data.T)
# 计算特征向量和特征值
eigenvalues, eigenvectors = np.linalg.eig(covariance_matrix)
# 对特征值进行排序
idx = eigenvalues.argsort()[::-1]
eigenvalues = eigenvalues[idx]
eigenvectors = eigenvectors[:,idx]
# 选取前k个特征向量
k = 2
selected_eigenvectors = eigenvectors[:,:k]
# 降维
reduced_data = centered_data.dot(selected_eigenvectors)
# 可视化
plt.scatter(reduced_data[:,0], reduced_data[:,1], alpha=0.5)
plt.show()
```
在上面的代码中,我们首先加载了automobile数据集,并选取了数值型特征。然后我们处理了缺失值,计算了数据的均值,对数据进行中心化,计算了协方差矩阵,以及特征向量和特征值。然后我们对特征值进行排序,选取前k个特征向量,进行降维,并用matplotlib将降维后的数据可视化。
阅读全文