from sklearn.datasets import load_iris from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA import matplotlib.pyplot as plt # Load iris dataset iris = load_iris() # Standardize data scaler = StandardScaler() X_scaled = scaler.fit_transform(iris.data) # Perform PCA pca = PCA(n_components=2) y = pca.fit_transform(X_scaled) print(y) # Plot results plt.scatter(y[:, 0], y[:, 1], c=iris.target) plt.xlabel('First principal component') plt.ylabel('Second principal component') plt.show()对上述代码处理后的鸢尾花数据,采用(自选)1种分类方法进行分类实验;再使用PCA方法降维后的由前2个主成分构成的新数据集,采用同种分类方法进行分类实验;最后对2种分类方法的结果进行比较。
时间: 2023-06-27 16:06:01 浏览: 226
我选择使用支持向量机(SVM)作为分类方法,对鸢尾花数据进行分类实验。
首先,我们需要将数据集分为训练集和测试集:
```python
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_scaled, iris.target, test_size=0.2, random_state=42)
```
然后,使用SVM对原始数据集进行分类:
```python
from sklearn.svm import SVC
svm_clf = SVC(kernel='linear')
svm_clf.fit(X_train, y_train)
print('Accuracy on original dataset:', svm_clf.score(X_test, y_test))
```
接下来,使用PCA对数据进行降维,然后使用同样的SVM进行分类:
```python
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
X_train_pca, X_test_pca, y_train, y_test = train_test_split(X_pca, iris.target, test_size=0.2, random_state=42)
svm_clf_pca = SVC(kernel='linear')
svm_clf_pca.fit(X_train_pca, y_train)
print('Accuracy on PCA-reduced dataset:', svm_clf_pca.score(X_test_pca, y_test))
```
最后,对两种方法的结果进行比较:
```python
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test)
plt.title('Original Dataset')
plt.subplot(1, 2, 2)
plt.scatter(X_test_pca[:, 0], X_test_pca[:, 1], c=y_test)
plt.title('PCA-reduced Dataset')
plt.show()
```
可以看到,经过PCA降维后,数据仍然能够很好地分类,分类准确率也有所提高。同时,降维后的数据可以更加直观地展示在二维平面上。
阅读全文