Python 机器学习

2018年3天快速入门python机器学习【黑马程序员】

机器学习(四) KNN算法

KNN 算法(又叫K-近邻算法)

下面通过一个小问题来解释什么是KNN算法

在这里插入图片描述
上图是我们所拥有的一张地图,现在我们只知道五个小人所在的地区以及他们距离我们自身的距离接下来就要使用KNN算法来推断我们自己处于哪个区域
我们所在的位置为红圈,那么显然离我们最近的小蓝所在的区域最可能是我们所在的区域
核心思想: 根据我们的邻居来推断出我们的类别

定义

如果一个样本在特征空间中的k个最相似的样本中的大多数属于某一个类别,那么该样本也属于该类别
在这里插入图片描述

第二个例子:电影

在这里插入图片描述
**已知的训练集是这么几部电影,他们有6个样本,2个特征,目标值是爱情片和动作片,我们需要根据特征来判断?是属于什么电影的
图2 展示了这六部电影和?电影的距离,我们之前讨论的情况是k=1,在这里
k = 1 时,? 为爱情片
k = 2 时,? 为爱情片
k= 6 时, ? 无法确定
**
所以我们的判断结果与k有很大的关系,而k的值取太大会出错,而k取的太小会受到异常值的影响
对于数据我们需要用无量纲化的处理,就是对数据的标准化处理

在这里插入图片描述

案例:鸢尾花种类的预测
1.首先导入鸢尾花数据集
from sklearn.datasets import load_iris
iris = load_iris()
2.划分数据集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=6)
3.特征工程: 标准化
from sklearn.preprocessing import StandardScaler
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
4.创建KNN算法预估器
from sklearn.neighbors import KNeighborsClassifier
estimator = KNeighborsClassifier(n_neighbors=3) # 这里取k=3
estimator.fit(x_train, y_train)
5.模型评估
5.1直接比对真实值和预测值
y_predict = estimator.predict(x_test)
print('y_predict:\n', y_predict)
print('直接比对真实值和预测值:\n', y_test == y_predict)

y_predict:
 [0 2 0 0 2 1 1 0 2 1 2 1 2 2 1 1 2 1 1 0 0 2 0 0 1 1 1 2 0 1 0 1 0 0 1 2 1
 2]
直接比对真实值和预测值:
 [ True  True  True  True  True  True False  True  True  True  True  True
  True  True  True False  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True False  True
  True  True]
5.2计算准确率
score = estimator.score(x_test, y_test)
print('准确率为:\n', score)

准确率为:
 0.9210526315789473
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier


def knn_iris():
    '''
    用KNN算法对鸢尾花进行分类
    :return:
    '''
    # 1) 获取数据
    iris = load_iris()
    # 2) 划分数据集
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=6)
    # 3) 特征工程 : 标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    # 4) KNN算法预估器
    estimator = KNeighborsClassifier(n_neighbors=3)
    estimator.fit(x_train, y_train)

    # 5) 模型评估
    # 方法1: 直接比对真实值和预测值
    y_predict = estimator.predict(x_test)
    print('y_predict:\n', y_predict)
    print('直接比对真实值和预测值:\n', y_test == y_predict)

    # 方法2: 计算准确率
    score = estimator.score(x_test, y_test)
    print('准确率为:\n', score)

    return None


if __name__ == '__main__':
    # 代码1:用KNN算法对鸢尾花进行分类
    knn_iris()

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐