在糖尿病数据集上将knn算法和pca算法进行对比,并将分类后的结果降维进行可视化
时间: 2024-02-17 13:01:32 浏览: 82
以下是一份Python代码,可以在糖尿病数据集上将knn算法和pca算法进行对比,并将分类后的结果降维进行可视化:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.decomposition import PCA
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 读取数据集
data = pd.read_csv('diabetes.csv')
# 划分特征和标签
X = data.iloc[:, :-1]
y = data.iloc[:, -1]
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 定义knn算法
knn = KNeighborsClassifier(n_neighbors=5)
# 训练knn模型
knn.fit(X_train, y_train)
# 预测测试集
y_pred_knn = knn.predict(X_test)
# 计算knn分类准确率
accuracy_knn = accuracy_score(y_test, y_pred_knn)
print('KNN分类准确率:', accuracy_knn)
# 定义pca算法
pca = PCA(n_components=2)
# 对数据进行降维
X_pca = pca.fit_transform(X)
# 划分降维后的训练集和测试集
X_train_pca, X_test_pca, y_train_pca, y_test_pca = train_test_split(X_pca, y, test_size=0.2, random_state=0)
# 训练knn模型(降维后)
knn_pca = KNeighborsClassifier(n_neighbors=5)
knn_pca.fit(X_train_pca, y_train_pca)
# 预测测试集(降维后)
y_pred_knn_pca = knn_pca.predict(X_test_pca)
# 计算knn分类准确率(降维后)
accuracy_knn_pca = accuracy_score(y_test_pca, y_pred_knn_pca)
print('KNN(PCA)分类准确率:', accuracy_knn_pca)
# 可视化分类结果(降维后)
plt.figure(figsize=(10, 8))
colors = ['red', 'green']
markers = ['o', 's']
for i, color, marker in zip(np.unique(y_test_pca), colors, markers):
plt.scatter(X_test_pca[y_test_pca == i, 0], X_test_pca[y_test_pca == i, 1], c=color, marker=marker)
plt.xlabel('PCA1')
plt.ylabel('PCA2')
plt.title('KNN classification (PCA)')
plt.legend(['Non-Diabetes', 'Diabetes'])
plt.show()
```
这段代码首先读取名为“diabetes.csv”的数据集,然后使用knn算法和pca算法对数据集进行分类,并计算分类准确率。其中,knn算法的k值为5,pca算法降维后的维度为2。最后,将降维后的分类结果可视化,其中红色圆点表示非糖尿病患者,绿色正方形表示糖尿病患者。可以通过调整knn算法的k值和pca算法降维后的维度,以及可视化的方式和参数,进一步探究算法的性能和数据的特征。
阅读全文