一、实验目的
利用KNN算法分类。
采用Wisconsin医学院的William H.Wolberg博士提供的乳腺癌的数据样本。所有数据来自真实临床案例,每个案例有32个属性。其中后30个属性是检测指标,每个属性值用不同量纲的数字表示表示。第1个属性是ID号,第2个属性是分类属性,指示该肿瘤是否为恶性,B表示良性,M表示恶性,数据集中的肿瘤性质是通过活检得出的结果。
利用KNN算法判别是否患有乳腺癌。
二、实验要求
采用KNN算法,对乳腺癌数据进行分析,判别是否患有乳腺癌。
三、实验步骤
(1)引入数据,数据标准化
对数据的分类标签进行数值化
(2)选择k值
k值选取奇数,由下图可知,k值选取3合适。
(3)由(2)可得测试结果如下:
四、实验过程中的问题,分析与讨论,心得体会
1、分类标签的类型,必须为数值型,本实验把分类标签数值化为0,1。
2、KNN分类主要只针对二分类问题。
五、主要代码
# 训练集、测试集
x, y = np.split(data1.values, (30,), axis=1)
x_train, x_test, y_train, y_test = train_test_split(x,
y, test_size=0.2, random_state=8)
# 对数据进行标准化处理
transfer1 = StandardScaler()
x_train = transfer1.fit_transform(x_train)
x_test = transfer1.transform(x_test)
ac=pd.DataFrame(columns=['k','Accuracy rate'])
ac['k']=range(1,22,2)
acc=[]
for k in range(1,22,2):
estimator = KNeighborsClassifier(n_neighbors=k, algorithm='auto')
estimator.fit(x_train, y_train)
score = estimator.score(x_test, y_test)
bpre=estimator.predict(x_test)
acc.append(score)
ac['Accuracy rate']=acc
print(ac)
estimator = KNeighborsClassifier(n_neighbors=3, algorithm='auto')
estimator.fit(x_train, y_train)
score = estimator.score(x_test, y_test)
print("精确度:",score)
if __name__ == '__main__':
knn_can()