前言
K-近邻算法(K Nearest Neighbor,简称KNN)
KNN算法是最开始的基础算法,可以解决分类问题和回归问题.
一、KNN算法思想是什么?
若一个样本在特征空间中的k个最相似的样本大多数属于某一个类别,则该样本也属于这个类别
例如:根据你的邻居判断出你的类别.
二、预测电影类型
1.样本相似性
样本相似性:样本都是属于一个任务数据集的.样本距离越近则越相似
2.利用K近邻算法预测电影类型
1.分别计算十号电影与前九个电影的距离,k=5找到最相似的电影类别,决定10号电影的类别
可以根据距离近的类别判断出预测目标类别
3.K值的选择
k值过小:用较小领域中的训练示例进预测,容易受到异常点的影响
k值过大:用较小的领域中的实例进行预测,容易受到样本均衡的问题
三、鸢尾花案例
实现流程:
# 1 获取数据集
# 2 数据基本处理
# 3 数据集预处理-数据标准化
# 4 机器学习(模型训练)
# 5 模型评估
# 6 模型预测
1.加载数据集
from sklearn.datasets import load_iris
# 加载鸢尾花数据集, 并显示属性 dataset.data .target .target_names .feature_names .DESCRdef dm01_loadiris():
# 加载数据集
mydataset = load_iris()
# 查看数据集信息
print('\n查看数据集信息-->\n', mydataset.data[:5])
# 查看目标值
print('mydataset.target-->\n', mydataset.target)
# 查看目标值名字
print('mydataset.target_names-->\n', mydataset.target_names)
# 查看特征名
print('mydataset.feature_names-->\n', mydataset.feature_names)
# 查看数据集描述
print('\nmydataset.DESCR-->\n', mydataset.DESCR)
# 数据文件路径
print('mydataset.filename-->\n', mydataset.filename)
2.查看类别划分
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
#显示鸢尾花数据
def dm02_showiris():
# 1 载入鸢尾花数据集 并显示特征名称.feature_names
mydataset = load_iris()
print(mydataset.feature_names)
# 2 把数据转换成dataframe格式 设置data, columns属性 目标值名称
iris_d = pd.DataFrame(mydataset['data'], columns=mydataset.feature_names)
iris_d['Species'] = mydataset.target
print('\niris_d-->\n', iris_d)
col1 = 'sepal length (cm)'
col2 = 'petal width (cm)'
# 3 sns.lmplot()显示
sns.lmplot(x=col1, y=col2, data=iris_d, hue='Species', fit_reg=False)
plt.xlabel(col1)
plt.ylabel(col2)
plt.title('iris')
plt.show()
3.划分数据集
from sklearn.model_selection import train_test_split
# 数据集划分
def dm03_traintest_split():
# 1 加载数据集
mydataset = load_iris()
# 2 划分数据集
X_train, X_test, y_train, y_test = train_test_split(mydataset.data, mydataset.target, test_size=0.3, random_state=22)
print('数据总数量', len(mydataset.data))
print('训练集中的x-特征值', len(X_train))
print('测试集中的x-特征值', len(X_test))
print(y_train)
4.模型训练
# 导入类库
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
def dm04_模型训练和预测():
# 1 获取数据集
mydataset = load_iris()
# 2 数据基本处理
x_train, x_test, y_train, y_test = train_test_split(mydataset.data, mydataset.target, test_size=0.2, random_state=22)
# 3 数据集预处理-数据标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
# 让测试集的均值和方法, 转换测试集数据;
x_test = transfer.transform(x_test)
# 4 机器学习(模型训练)
estimator = KNeighborsClassifier(n_neighbors=3)
estimator.fit(x_train, y_train)
# 5 模型评估 直接计算准确率 100个样本中模型预测对了多少
myscore = estimator.score(x_test, y_test)
print(‘myscore-->’, myscore)
# 6 模型预测 # 需要对待预测数据,执行标准化
print('通过模型查看分类类别-->', estimator.classes_)
mydata = [[5.1, 3.5, 1.4, 0.2], [4.6, 3.1, 1.5, 0.2]]
mydata = transfer.transform(mydata) print('mydata-->', mydata)
mypred = estimator.predict(mydata) print('mypred-->\n', mypred)
mypred = estimator.predict_proba(mydata) print('mypred-->\n', mypred)
5.模型评估
# 1 获取数据集mydataset = load_iris()
# 2 数据基本处理
x_train, x_test, y_train, y_test = train_test_split(mydataset.data, mydataset.target, test_size=0.2, random_state=22)
# 3 数据集预处理-数据标准化transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
# 让测试集的均值和方法, 转换测试集数据;x_test = transfer.transform(x_test)
# 4 机器学习(模型训练)
estimator = KNeighborsClassifier(n_neighbors=3)
estimator.fit(x_train, y_train)
# 5-1 直接使用score函数 模型评估 100个样本中模型预测对了多少
myscore = estimator.score(x_test, y_test)
print('myscore-->', myscore)
# 5-2 利用sklearn.metrics包中的 accuracy_score 方法
y_predict = estimator.predict(x_test)
myresult = accuracy_score(y_test, y_predict)
print('myresult-->', myresult)
总结
以上就是今天要讲的内容,本文简单介绍了KNN算法的思想以及应用,KNN算法是机器学习中的经典算法.