主要内容:
1、knn工作原理
2、knn开发流程
3、knn算法特点
4、项目实战:knn实现 iris鸢尾花数据集三分类问题
一、KNN 工作原理
1、假设有一个带有标签的样本数据集(训练样本集),其中包含每条数据与所属分类的对应关系。
2、输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较。
2.1、计算新数据与样本数据集中每条数据的距离。
2.2、对求得的所有距离进行排序(从小到大,越小表示越相似)。
2.3、取前 k (k 一般小于等于 20 )个样本数据对应的分类标签。
3、求 k 个数据中出现次数最多的分类标签作为新数据的分类。
二、KNN 开发流程
收集数据:任何方法
准备数据:距离计算所需要的数值,最好是结构化的数据格式
分析数据:任何方法
训练算法:此步骤不适用于 k-近邻算法
测试算法:计算错误率
使用算法:输入样本数据和结构化的输出结果,然后运行 k-近邻算法判断输入数据分类属于哪个分类,最后对计算出的分类执行后续处理
三、KNN 算法特点
优点:精度高、对异常值不敏感、无数据输入假定
缺点:计算复杂度高、空间复杂度高
适用数据范围:数值型和标称型
四、项目实战:knn实现 iris鸢尾花数据集三分类问题
#coding:utf-8
from __future__ import division
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import time
start_time = time.time()
import pandas as pd
# 从sklearn.datasets 导入 iris数据加载器。
from sklearn.datasets import load_iris
# 使用加载器读取数据并且存入变量iris。
iris = load_iris()
# 查验数据规模。
print iris.data.shape
# 从sklearn.cross_validation里选择导入train_test_split用于数据分割。
from sklearn.model_selection import train_test_split
# 从使用train_test_split,利用随机种子random_state采样25%的数据作为测试集。
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.25, random_state=33)
# 从sklearn.preprocessing里选择导入数据标准化模块。
from sklearn.preprocessing import StandardScaler
# 从sklearn.neighbors里选择导入KNeighborsClassifier,即K近邻分类器。
from sklearn.neighbors import KNeighborsClassifier
# 对训练和测试的特征数据进行标准化。
ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)
# 使用K近邻分类器对测试数据进行类别预测,预测结果储存在变量y_predict中。
knc = KNeighborsClassifier()
knc.fit(X_train, y_train)
y_predict = knc.predict(X_test)
# 使用模型自带的评估函数进行准确性测评。
print 'The accuracy of K-Nearest Neighbor Classifier is', knc.score(X_test, y_test)
# 依然使用sklearn.metrics里面的classification_report模块对预测结果做更加详细的分析。
from sklearn.metrics import classification_report
print classification_report(y_test, y_predict, target_names=iris.target_names)
"D:\Program Files\Python27\python.exe" D:/PycharmProjects/sklearn/knn.py
(150L, 4L)
The accuracy of K-Nearest Neighbor Classifier is 0.894736842105
precision recall f1-score support
setosa 1.00 1.00 1.00 8
versicolor 0.73 1.00 0.85 11
virginica 1.00 0.79 0.88 19
avg / total 0.92 0.89 0.90 38
Process finished with exit code 0