KNN【K-近邻算法】
独热编码
近似误差:对现有训练集的训练误差,关注训练集,如果近似误差过小可能会出现过拟合的现象,对现有的训练集能有很好的预测,但是对未知的测试样本将会出现较大偏差的预测。模型本身不是最接近最佳模型。
估计误差:可以理解为对测试集的测试误差,关注测试集,估计误差小说明对未知数据的预测能力好,模型本身最接近最佳模型。
特征工程—特征预处理
归一化
实例:
···
1.knn判别类型的原理
标签
爱情电影
动作电影
判断依据是什么?动作镜头和爱情镜头,他们都是特征
···
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_excel('./moive.xlsx')
2.特征构造
x = data[['动作镜头','爱情镜头']].copy() # 不改变原始数据
y = data['电影类型'].copy()
3.待预测样本
# 电影A 【8,21】
# 电影B 【15,16】
# 预测样本的结构是二维数组
x_test = np.array([[8,21],[15,16]])
x_test
#取DF的数据,可以直接使用values
x.values
4.待分类样本的可视化
plt.figure(figsize=(8,5))
plt.scatter(x['动作镜头'],x['爱情镜头'],s=200,
c=y.map({'动作电影':0,'爱情电影':1}),
cmap=plt.cm.Accent_r)
5.重新绘制 分布画图观察结果
#只包含动作电影或者爱情电影的 特征
action = x.loc[y=='动作电影']
love = x.loc[y=='爱情电影']
plt.figure(figsize=(8,5))
plt.scatter(action['动作镜头'],action['爱情镜头'],
s=200,
c='blue',
label='动作电影')
plt.scatter(love['动作镜头'],love['爱情镜头'],
s=200,
c='red',
label='爱情电影')
plt.scatter(x_test[:,0],x_test[:,1],marker='*',s=200)
plt.xlabel('动作镜头')
plt.ylabel('爱情镜头')
plt.legend()
6.算法验证
# 1.导入knn分类器
from sklearn.neighbors import KNeighborsClassifier
# 2.实例化算法对象
knn = KNeighborsClassifier(n_neighbors=3)
# 3.训练模型,knn没有计算,只是存储数据
knn.fit(x,y)
# 4.预测待预测样本,knn有计算
knn.predict(x_test)