美文网首页
KNN 最邻近

KNN 最邻近

作者: 李静数据分析 | 来源:发表于2019-07-31 19:47 被阅读0次

一、KNN介绍

  • 既可以做回归也可以做分类
  • k邻近的3要素
    (1) 选择合适的K(一般选奇数):通过交叉验证来选
    (2) 距离选择:欧式距离、曼哈顿距离、余弦值、相关度
    (3) 决策规则:投票、均值
  • 算法流程
    (1) 把一个物体表示成向量:特征工程
    (2) 标记每个物体的标签
    (3) 选择合适的K
    (4) 计算两个物体之间的距离/相似度
  1. 调用KNN函数来实现分类
# 读取相应的库
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
# 读取数据 X, y
iris = datasets.load_iris()
X = iris.data
y = iris.target
print (X, y)
# 把数据分成训练数据和测试数据
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=2003)
# 构建KNN模型, K值为3、 并做训练
clf = KNeighborsClassifier(n_neighbors=3)
clf.fit(X_train, y_train)
# 计算准确率
from sklearn.metrics import accuracy_score
correct = np.count_nonzero((clf.predict(X_test)==y_test)==True)
#accuracy_score(y_test, clf.predict(X_test))
print ("Accuracy is: %.3f" %(correct/len(X_test)))

2.自己准备数据KNN实现

import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
#读取数据
df = pd.read_csv('data.csv')
#清洗数据
# 把颜色独热编码
df_colors = df['Color'].str.get_dummies().add_prefix('Color: ')
# 把类型独热编码
df_type = df['Type'].apply(str).str.get_dummies().add_prefix('Type: ')
# 添加独热编码数据列
df = pd.concat([df, df_colors, df_type], axis=1)
# 去除独热编码对应的原始列
df = df.drop(['Brand', 'Type', 'Color'], axis=1)
# 数据转换
matrix = df.corr()
f, ax = plt.subplots(figsize=(8, 6))
sns.heatmap(matrix, square=True)
plt.title('Car Price Variables')
from sklearn.neighbors import KNeighborsRegressor
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
from sklearn.preprocessing import StandardScaler
import numpy as np
X = df[['Construction Year', 'Days Until MOT', 'Odometer']]
y = df['Ask Price'].values.reshape(-1, 1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=41)
X_normalizer = StandardScaler() # N(0,1)
X_train = X_normalizer.fit_transform(X_train)
X_test = X_normalizer.transform(X_test)
y_normalizer = StandardScaler()
y_train = y_normalizer.fit_transform(y_train)
y_test = y_normalizer.transform(y_test)
knn = KNeighborsRegressor(n_neighbors=2)
knn.fit(X_train, y_train.ravel())
#Now we can predict prices:
y_pred = knn.predict(X_test)
y_pred_inv = y_normalizer.inverse_transform(y_pred)
y_test_inv = y_normalizer.inverse_transform(y_test)
# Build a plot
plt.scatter(y_pred_inv, y_test_inv)
plt.xlabel('Prediction')
plt.ylabel('Real value')
# Now add the perfect prediction line
diagonal = np.linspace(500, 1500, 100)
plt.plot(diagonal, diagonal, '-r')
plt.xlabel('Predicted ask price')
plt.ylabel('Ask price')
plt.show()
print(y_pred_inv)
pred = knn.predict(X_test)
from sklearn.metrics import mean_absolute_error
acc = mean_absolute_error(y_pred_inv, y_test_inv)

data的内容

二、知识补充

  • 参数
    • 模型参数:
    • 超参数:模型外面的参数
  • 交叉验证:把训练数据进一步分成训练数据和验证集。选择在验证集数据李最好的超参数组合。
    交叉验证图
  • 特征标准化

三、KNN延伸

  • kNN时间复杂度:O(N),N是样本总数

  • KD树,时间复杂度O(logN);对于数据维度d来说,指数级复杂度。

  • LSH:把样本分在不同的bucket,使得距离较近的样本较大概率在同一个bucket里。是一个近似的方法。


    image.png
  • 处理特征之间的相关性:曼哈顿距离

  • 处理样本的重要性


    image.png
  • 利用Kernel Trick


    image.png

四、总结

  • KNN比较适合应用在低维空间
  • 预测的时候复杂度高,对于大数据需要一定的处理

相关文章

  • KNN 最邻近

    一、KNN介绍 既可以做回归也可以做分类 k邻近的3要素(1) 选择合适的K(一般选奇数):通过交叉验证来选(2)...

  • SKIL/工作流程/KNN(K邻近值算法)

    K邻近值算法 除了部署转换和网络模型,SKIL还允许你部署KNN模型。 KNN (k邻近值算法) 是最简单的分类算...

  • KNN最邻近分类运用

  • 机器学习笔记:K-近邻算法(KNN)

    一、介绍 KNN算法称为邻近算法,或者说K邻近算法(kNN,k-NearestNeighbor),分类算法。 KN...

  • 2019-03-30派森学习第131天

    上午看了一下k邻近算法(k-Nearest Neighbor,KNN)。 该算法主要思想是通过计算周围k个最邻近的...

  • 邻近算法KNN

    邻近算法 邻近算法,或者说K最近邻(KNN,K-NearestNeighbor)分类算法是数据挖掘[https:/...

  • knn算法

    knn算法 knn算法简介 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法。所谓K...

  • 7.最邻近规则分类KNN

    1. 综述 2. 例子: 未知电影属于什么类型? 3. 算法详述 其他距离衡量:余弦值(cos), 相关度 (co...

  • KNN(线性模型)

    KNN最邻近结点算法 一、算法原理 kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于...

  • K邻近算法(KNN)

    K邻近算法(KNN) kNN 可以说是最简单的监督学习分类器了。想法也很简单,就是找出测试数据在特征空间中的最近邻...

网友评论

      本文标题:KNN 最邻近

      本文链接:https://www.haomeiwen.com/subject/snatdctx.html