机器学习-最近邻算法(knn)

最近邻算法

最近邻算法是机器学习算法中比较简单的一种算法了,下面用图阐述一下该算法。
机器学习-最近邻算法(knn)_第1张图片机器学习-最近邻算法(knn)_第2张图片
上面笔记只说了knn的最常出现的一种分类方式,下面还将补充一些其他方式。

knn加权分类:
加权的多数投票法;对于k个样本,每个样本到待测样本的距离的倒数作为当前样本的权重系数,在k个样本中,统计各个类别对应权重的累加和,最终将权重系数最大的那个对应类别作为待测样本的类别。

knn回归预测:
将k个样本的y值的均值作为待测样本的预测值。

knn加权回归预测:
对于k个样本,每个样本到待测样本的距离的倒数作为当前样本的权重系数,然后权重系数归一化,最后将归一化的权重和y一起做一个加权均值的操作,将最终的均值作为预测值。

下面是代码部分:

```python
from sklearn.datasets import load_iris        #导入数据包
from sklearn.model_selection import train_test_split, GridSearchCV        #导入把数据集分为测试集和训练集的包
from sklearn.preprocessing import StandardScaler          #导入数据归一化的包
from sklearn.neighbors import KNeighborsClassifier        #导入knn邻近算法的包
#(from sklearn.neighbors import KNeighborsRegressor       #导入knn邻近算法的包 )

class KNN(object):
    # 获取鸢尾花数据 三个类别(山鸢尾/0,虹膜锦葵/1,变色鸢尾/2),每个类别50个样本,每个样本四个特征值(萼片长度,萼片宽度,花瓣长度,花瓣宽度)
    def get_iris_data(self):      #生成数据的函数
        iris = load_iris()        #获取鸢尾花数据(该数据的数据类型是一个字典)
        iris_data = iris.data      #提出鸢尾花的特征数据
        iris_target = iris.target   #提出鸢尾花的标签数据
        return iris_data, iris_target     #返回一个包含特征数据和标签数据的元组

    def run(self):
        # 1.获取鸢尾花的特征值,标签值
        iris_data, iris_target = self.get_iris_data()   
        # 2.将数据分割成训练集和测试集 test_size=0.25表示将25%的数据用作测试集
        x_train, x_test, y_train, y_test = train_test_split(iris_data, iris_target, test_size=0.25)
        # 3.特征工程(对特征值进行标准化处理,即数据归一化)
        std = StandardScaler()     #创建一个数据标准化的对象
        x_train = std.fit_transform(x_train)   #对特征值的训练集做数据标准化   
        x_test = std.transform(x_test)        #对特征值的测试集做数据标准化
        # 4.送入算法
        knn = KNeighborsClassifier(n_neighbors=5) # 创建一个KNN算法实例,n_neighbors默认为5,后续通过网格搜索获取最优参数
        knn.fit(x_train, y_train) # 将训练集送入算法来训练knn模型
        y_predict = knn.predict(x_test) # 获取预测结果
        print("准确率:",knn.score(x_test, y_test))      #输出预测的准确率

if __name__ == '__main__':
    knn = KNN()         #   实例化一个knn对象
    knn.run()           #调用knn对象里的run方法

你可能感兴趣的:(机器学习,机器学习-knn)