新2019计划:机器学习100天—K近邻法【5】

K近邻法

k近邻算法是一种简单且也最常用的分类算法,它也可以应用回归计算。
k-NN是无参数学习,这意味着它不会对底层数据的分布做出任何假设。
若要对未标记的对象进行分类,则会计算该对象对标记的对象之间的距离,确定其k近邻点,然后使用周边数量最多的最近邻点的类标签来确定该对象的类标签。对于实际中输入的变量,最常用的距离度量是欧式距离。

k值的确定:
k值小意味着噪声会对结果产生较大的影响,而k值打则会使计算成本变高。这很大程度上取决于你的实际情况,有些情况下最好是遍历每个可能的k值,然后自己根据实际来选择k值。

knn算法如何工作:
k-nn用于分类时,输出是一个类别,对于离散分类,返回k个点出现频率最多的类别作为预测分类。其中有三个关键元素:一组标记的对象,例如:一组已存储的记录、对象之间的距离以及K的值-最近邻的数量。

常见的距离度量方法
1、汉明距离
2、曼哈顿距离
3、闵式距离

数据集展示
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

dataset = pd.read_csv('Social_Netword_Ads.csv')
X = dataset.iloc[:, [2, 3]].values
y = dataset.iloc[:, 4].values

# 数据集划分训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state = 0)

# 特征缩放
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

# k-nn对训练集数据训练
from sklearn.neighbors import KNeighborsClassifier
classifier = KNeighborsClassifier(n_neighbors = 5, metric = 'minkowski', p = 2)
classifier.fit(X_train, y_train)

# 对测试集进行预测
y_pred = classifier.predict(X_test)

# 生成混淆矩阵
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

你可能感兴趣的:(新2019计划:机器学习100天—K近邻法【5】)