在Python使用KNN近邻算法入门第一个机器学习模型
前言
这篇博客亦在为各位想入门机器学习的小白(包括我)使用KNN(k-Nearest Neighbor)分类算法实现自己的第一个模型。本文内容主要包括以下4部分:
- 对KNN算法的简介
- 对数据集的整理以及转变
- 简单的数据可视化
- 预测你的测试集并评估准确率
文中部分内容来自Cousera MU大学网课,我进行了记录以及整理。下面开始。
对KNN模型的简介
K最近邻(k-Nearest Neighbor,KNN)是一种常用的分类算法,导入数据以后可以用于做分类问题,比如输入重量,高度,色泽数据来分辨水果类型。下文中用KNN 算法实现对癌症病人数据的分类然后评估该病人的癌症是恶性还是良性(0代表恶行,1代表良性)。
本文只涉及sklearn.neighbors中的 n_neighbors 参数。建议大家再去百度学习这个模型的细节。
下图为算法的大体步骤:
总结一下,在你给这个模型喂了X_train(训练集数据)和y_train(label标签,也就是target)以后,当你再给它喂一个新的X_test(测试集)以后,这个Classifier会记住整个训练集然后做以下的事情:
- Classifier找到在X_test训练集数据中 与X_train训练集中 最接近的k个数据,我们把这个有点类似交集的数据叫做X_NN
- 然后Classifier会获得这些X_NN数据的label(target),这些标签叫做y_NN
- 组合y_NN的标签值来预测X_test的label
开始
首先引入需要的包以及数据。这个cancer的数据集未处理前比较杂乱。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
cancer = load_breast_cancer()
#cancer 这是什么鬼?里面比较杂乱,在此不展示output
cancer.keys() #查看主要的标签
dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])
为了确保尽可能易于理解和实现knn算法,只简单的引入以上三个包,然后导入数据。
用keys看看里面有啥重点?
在cancer数据集中,data是数据集中的数据部分(可以想象成excel表格中除了行和列的部分),target和target_names代表病人是否有癌症(0代表得了恶性癌症,1代表良性癌症),target就是我们使用data数据集预测的目标,feature_names代表数据集的列名称,也就是data每一列数据的列名称(总不能光有个数字不知道是啥吧)。
数据整理
为了方便操作,我们准备把cancer里面一坨东西转换为Pandas中的数据框。也方便一会对数据的操作。
In:
data = np.c_[cancer.data,cancer.target] #左右方向合并矩阵
columns = np.append(cancer.feature_names,'target')
df = pd.DataFrame(data,columns = columns)
df.head()
对于看不懂上面 np.c_[array1,array2] 的小伙伴我这里再做一个栗子,知道的可以跳过
In:
# np.c_[array1,array2]举例,看懂请跳过
a = np.array([[1,1,1],[1,1,1]])
print(' a\n',a)
b = np.array([[2,4,5],[6,7,8]])
print(' b\n',b)
print(' a和b合并\n',np.c_[a,b])
Out:
a
[[1 1 1]
[1 1 1]]
b
[[2 4 5]
[6 7 8]]
a和b合并
[[1 1 1 2 4 5]
[1 1 1 6 7 8]