机器学习之KNN算法
——近朱者赤,近墨者黑
KNN算法概述
- KNN的全称是K Nearest Neighbors,意思是K个最近的邻居,也叫作邻近算法
- 核心思想:
- KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别
- kNN是一种常见的监督学习方法。工作机制简单:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k各训练样本,然后基于这k个“邻居”的信息来进行预测,通常,在分类任务中可使用“投票法”,即选择这k个样本中出现最多的类别标记作为预测结果;在回归任务中可以使用“平均法”,即将这k个样本的实值输出标记的平均值作为预测结果;还可以基于距离远近进行加权平均或加权投票,距离越近的样本权重越大
算法流程
-
收集数据:可以使用任何方法
-
准备数据:距离计算所需要的数值,最好是结构化的数据格式
-
在用算法进行回归计算的时候,对于有些离散型的列需要我们对他进行处理成数据,方便后面进行计算
-
方法一:replace
-
X2['球队市值'] = X2['球队市值'].replace({ '高': 2, '中': 1, '低': 0})
-
方法二:但是如果对于有多个的话,该方法有点麻烦,可以使用如下方法:
-
lables = X['球队市值'].unique().tolist() X['球队市值']= X['球队市值'].apply(lambda x:labels.index(x)) labels = X['球队胜率'].unique().tolist() X['球队胜率']= X['球队胜率'].apply(lambda x:labels.index(x)) labels = X['是否入选过全明星'].unique().tolist() X['是否入选过全明星']= X['是否入选过全明星'].apply(lambda x:labels.index(x))
-
方法三:使用sklearn里面的模块preprocessing.OrdinalEncoder处理特征标签
-
from sklearn.preprocessing import OrdinalEncoder Or = OrdinalEncoder() # 进行实例化 or_ = data[['是否入选过全明星', '球队胜率', '球队市值']] # 选出需要进行普通编码处理的特征列 trans = Or.fit_transform(or_) array([[1., 2., 2.], [1., 2., 0.], [1., 2., 1.], ..., [0., 2., 2.], [0., 0., 1.], [0., 1., 0.]]) Or.categories_ # 查看每一个数字代表的是什么 -- [array(['否', '是'], dtype=object), -- array(['中', '低', '高'], dtype=object), -- array(['中', '低', '高'], dtype=object)] df1 = pd.DataFrame(trans, columns=['是否入选过全明星', '球队胜率', '球队市值']) # 将array转换成dataframe data = pd.merge(right=data
-
-