1 介绍
使用KNN对鸢尾花数据集进行分类,并且使用LDA进行降维,然后再使用KNN做对比实验
2 导入包
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
import pandas as pd
from sklearn.utils import shuffle
3 加载数据
注意:
- 1 打乱数据集
- 2 划分训练集、测试集;
- 3 每个数据都需要划分特征集、标签集
path = "iris.data"
df = pd.read_csv(path, header=None)
df = shuffle(df)
r = int(len(df) * 0.7)
train_data = df[:r]
test_data = df[r:]
train_x = train_data.loc[:, :3]
train_y = train_data.loc[:, 4]
test_x = test_data.loc[:, :3]
test_y = test_data.loc[:, 4]
4 使用KNN进行分类
KNN模型,K=5 为K紧邻,K=1为最近邻,使用费fit训练模型,使用predict函数进行预测,最后使用acc计算精度。
knn = KNeighborsClassifier(n_neighbors=5) # 建立knn模型
knn.fit(train_x, train_y) # 训练模型
y_pred = knn.predict(test_x)
a = accuracy_score(test_y, y_pred)
print(a)
5 先使用LDA进行降维,再使用KNN进行分类
- 使用LDA将维度降低到1维
- 使用transform对原数据进行降维,例如原来是4维的,现在是1维的,则会生成一个4*1的矩阵,降维后的数据特征是1维;
- 使用KNN进行降维
n_components = 1
lda = LinearDiscriminantAnalysis(solver='svd', n_components=n_components)
lda.fit(train_x, train_y)
train_x1 = lda.transform(train_x)
test_x1 = lda.transform(test_x)
knn = KNeighborsClassifier(n_neighbors=5) # 建立knn模型
knn.fit(train_x1, train_y)
y_pred1 = knn.predict(test_x1)
a = accuracy_score(test_y, y_pred1)
print(a)
关注:AI学习部
发送:机器学习