K最近邻kNN-学习笔记

# -*- coding: utf-8 -*-
"""
Created on Thu Jan 24 09:34:32 2019

1. 翼尾花数据
2. 用 KNeighborsClassifier

"""

# -*- coding:utf-8 -*-
import numpy as np
from sklearn.neighbors import KNeighborsClassifier

 
from sklearn.datasets import load_iris
iris = load_iris() #载入数据
features, labels = np.array(iris.data), np.array(pd.Categorical.from_codes(iris.target, iris.target_names).tolist()) #多个连续自变量 和 一个离散因变量 
feature_names    = iris.feature_names 

from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test= train_test_split(features,labels,test_size =0.33,shuffle=True,random_state=42) 
#shuffle随机 random_state设定随机种子 test_size测试数据占比33% 

def accuracy(test_labels, pred_lables):
    correct = np.sum(test_labels == pred_lables)
    n = len(test_labels)
    return float(correct) / n

knn = KNeighborsClassifier(n_neighbors=5)
y_test_pre = knn.fit(x_train, y_train).predict(x_test)

print(accuracy(y_test_pre, y_test)) 


# 0.98

改进点:

1. 根据最近的K个值 的距离对最终结果,进行加权。

2. 通过先验知识,对训练数据进行筛选,缩小训练样本,提高样本质量,有利于提高计算速度。

3. 变量尽量少,这样可以提供速度。

优点:

1. 算法原理非常简单: 用 欧式距离最近(或曼哈顿距离)的K个样本点的分类中的众数,作为预测分类。

2. 便于并行计算。

3. 可以做 分类、也可以连续变量拟合预测

缺点:

1. 自变量必须是连续性,并且做好了归一化等处理,方便测量距离。

2. 对于连续性因变量,只能做插值预测,不适合做外推预测。

3. 分类新实例开销大,每次对一个测试样本,需要用到几乎全部的训练样本数据,分别计算距离

4. 会考虑所有属性/自变量。导致计算量大。

kNN(K-Nearest Neighbor)最邻近规则分类

机器学习(二):k近邻法(kNN)

原文地址:https://www.cnblogs.com/andylhc/p/10312785.html