数据类型可以有:数字,分类变量,二进制,email,微博,用户数据,json,地理位置,传感器数据等。数据定量或者定性的属性值,比如身高,体重,年龄,性别,学科成绩等。
算法简介:
kNN(k-最近邻)方法通常用于一个更复杂分类算法的一部分。是分类数据最简单最有效的算法,是基于实例的学习,须有大量的数据集;无法给出任何数据的基础结构信息,无法知晓平均实例样本和典型实例样本具有什么特征。例如,我们可以用它的估计值做为一个对象的特征,可应用于手写识别。但它无法持久化分类器(无法存储)。
KNN示例:鸢尾花分类问题。
from sklearn import datasets #引入数据源
from sklearn.model_selection import train_test_split #引入模型选择器,构建训练模型和测试模型
from sklearn.neighbors import KNeighborsClassifier #引入K近邻(KNN)算法
from sklearn.model_selection import cross_val_score #引入评价函数
iris = datasets.load_iris() #获得iris数据
featureIris = iris.feature_names #获得iris数据的特征 ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
iris_Data = iris.data #获得ndarray类型的 iris的所有数据值(数值)
iris_Value = iris.target #获得ndarray类型的 iris的所有分类的值(0 1 2)
iris_Name = iris.target_names #获得iris数据分类的名称 ['setosa' 'versicolor' 'virginica']
x_train, x_test, y_train, y_test = train_test_split(iris_Data, iris_Value,test_size=0.3)
# 由模型选择器构建,第一参数是数据,第二参数是结果,测试的比例是0.3,也就是70%训练,30%的数据用来测试
# 训练数据 测试数据 结果训练分类值 测试分类值
knn = KNeighborsClassifier(n_neighbors=4) # 定义knn算法器 多次测试,n_neighbor=4准确率为95-97
knn.fit(x_train, y_train) # 将数据训练集 和 结果训练集 放入knn算法训练
result = knn.predict(x_test) # 测试集的测试结果
print('knn分类器的测试结果:',result)
knnX = KNeighborsClassifier(n_neighbors=5)
knnX.fit(iris_Data, iris_Value)
print('knnX分类器预测这个结果:',knnX.predict([[3, 5, 4, 2]])) # 预测这个结果
print('knn分类器预测这一组结果:',knn.predict([[3, 5, 4, 2], [5, 4, 3, 2]])) # 预测一组结果
print('knn分类器的得分',knn.score(iris_Data,iris_Value))
scores = cross_val_score(knnX,iris_Data,iris_Value,cv=5,scoring='accuracy') #分批评价精确度 结果[0.96666667 1. 0.93333333 0.96666667 1. ]
print('knnX分类器的分批测试精度:',scores)
Knn算法器的predict方法,可用于直接进行预测。那么我们怎么评价KnnX这种分类器好还是不好呢?可以用精确度来测试。上面部分,我们可以理解为将数据切分为5块,每块都测试精度,评价方式用准确度的方式。这种验证方式,被称为交叉验证。
【练习】那么如果遇到普通的Excel表格,如何使用KNN进行预测呢?
学堂在线有一个这样的表格,要求看其他特征对性别的区分度。
# -*- coding: utf-8 -*-
import pandas as pd
from sklearn.model_selection import train_test_split #引入模型选择器,构建训练模型和测试模型
from sklearn.neighbors import KNeighborsClassifier #引入K近邻(KNN)算法
from sklearn.model_selection import cross_val_score #引入评价函数
dataPath = '学堂性别.xls'
dataTestAll = pd.DataFrame(pd.read_excel(dataPath)) #读取xls文件,并转化为dataframe
dataTest = dataTestAll.drop(['编号','性别'],axis=1)
#删除编号和性别列,因为编号在分析过程中无意义,性别是需要分析的结果列
data_Train = dataTest.values[0:,1:] #获取除了特征(属性)之外的dataframe的所有数据
data_values = dataTestAll['性别'].values[0:,] #获取身高列的全部数据
x_train, x_test, y_train, y_test = train_test_split(data_Train, data_values,test_size=0.3)
# 由模型选择器构建,第一参数是数据,第二参数是结果,测试的比例是0.3
knn = KNeighborsClassifier(n_neighbors=8) # 定义knn算法器 多次测试,n_neighbor=8准确率为97-98
knn.fit(x_train, y_train) # 将数据训练集 和 结果训练集 放入knn算法训练
result = knn.predict(x_test) # 测试集的测试结果
print('KNN得分:',knn.score(data_Train,data_values))
scores = cross_val_score(knn,data_Train,data_values,cv=5,scoring='accuracy')
print('KNN评价:',scores)
#分5批评价精确度,评价指标是accuracy准确度 结果[0.97979798 0.96938776 0.97938144 0.96907216 0.96907216]