二、k近邻与决策树
1.k近邻
原理:
如果一个样本在特征空间中的k个最相似(特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也被分到这一类别。即某个样本的类别由与它最相近的k个样本投票得出。通俗的说就是少数服从多数。
有以下几点需要说明:
(1)k的选取
k过小意味着整体模型会变得复杂,容易发生过拟合;k过大会导致与输入实例较远的样本也会起到预测作用,使得预测错误的概率增加。通常采用交叉验证的方法来选取最优的k。
(2)距离的度量
常用的距离度量方法有曼哈顿距离、欧式距离等。
之间的L_p距离定义为:
当p=1时为曼哈顿距离;当p=2时为欧氏距离。
(3)特征归一化
在处理不同取值范围的特征值时,常采用的方法是将数值归一化,将每一个特征值的取值范围归一化到0~1或者-1~1。
常采用的归一化方法为极差归一化:
过程:
(1)给定样本点,计算数据集中所有点到该点的距离,按照距离进行排序。
(2)选取与样本点距离最小的k个点。
(3)确定这k个点所在类别出现的频率。
(4)返回这k个点所在类别出现频率最高的类别作为预测结果。
python代码:
from sklearn import datasets#导入数据集
from sklearn.preprocessing import MinMaxScaler#归一化
from sklearn.model_selection import train_test_split#划分数据集
from sklearn.metrics import accuracy_score#评分
from scipy.spatial import distance#计算距离
import numpy as np
import operator#排序
#计算欧氏距离
#设每个样本有m个属性,训练集一共有n个数据
#row就代表新输入的那个样本,因为只是一个数据,所以是1*m维的
#Matrix代表整个训练集,是个n*m维的。
#下面的函数用来计算新输入的样本与整个训练集的欧氏距离
def my_m