自实现
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
"""
电影分类数据类型分析 方法自实现k-近邻方法
"""
#加载数据
move=pd.read_excel('./电影分类数据.xlsx')
# print(move)
"""
序号 电影名称 搞笑镜头 拥抱镜头 打斗镜头 电影类型 唐人街探案 23 3 17
0 1 宝贝当家 45 2 9 喜剧片 NaN NaN NaN NaN
1 2 美人鱼 21 17 5 喜剧片 NaN NaN NaN NaN
2 3 澳门风云3 54 9 11 喜剧片 NaN NaN NaN NaN
3 4 功夫熊猫3 39 0 31 喜剧片 NaN NaN NaN NaN
4 5 谍影重重 5 2 57 动作片 NaN NaN NaN NaN
5 6 叶问3 3 2 65 动作片 NaN NaN NaN NaN
6 7 我的特工爷爷 6 4 21 动作片 NaN NaN NaN NaN
7 8 奔爱 7 46 4 爱情片 NaN NaN NaN NaN
8 9 夜孔雀 9 39 8 爱情片 NaN NaN NaN NaN
9 10 代理情人 9 38 2 爱情片 NaN NaN NaN NaN
10 11 新步步惊心 8 34 17 爱情片 NaN NaN NaN NaN
11 12 伦敦陷落 2 3 55 动作片 NaN NaN NaN NaN
"""
# print(move.shape)
#获取训练集
train=move.iloc[:,1:6]
# print(train)
#获取测试集数据
test=np.array(move.columns[-4:])
# print(test)
#自实现knn算法分析
k=5
#循环计算每个点与测试样本的距离
index_num=train.shape[0]
train['欧氏距离']=np.nan#先占位
for i in range(index_num):#训练集数据有几行就循环几行
dist=np.sqrt(np.sum(np.power(train.iloc[i,1:4].values-test[1:], 2)))
# print(dist)
train.ix[i,'欧氏距离']=dist#将距离保存到train中
# print(train)
"""
电影名称 搞笑镜头 拥抱镜头 打斗镜头 电影类型 欧氏距离
0 宝贝当家 45 2 9 喜剧片 23.430749
1 美人鱼 21 17 5 喜剧片 18.547237
2 澳门风云3 54 9 11 喜剧片 32.140317
3 功夫熊猫3 39 0 31 喜剧片 21.470911
4 谍影重重 5 2 57 动作片 43.874822
5 叶问3 3 2 65 动作片 52.009614
6 我的特工爷爷 6 4 21 动作片 17.492856
7 奔爱 7 46 4 爱情片 47.686476
8 夜孔雀 9 39 8 爱情片 39.661064
9 代理情人 9 38 2 爱情片 40.570926
10 新步步惊心 8 34 17 爱情片 34.438351
11 伦敦陷落 2 3 55 动作片 43.416587
"""
#对训练集数据的电影类型进行排序 从小到大
train=train.sort_values('欧氏距离').iloc[:k,:]#ix[:k,:] 取0行到k行,所有列
# print(train)
"""
电影名称 搞笑镜头 拥抱镜头 打斗镜头 电影类型 欧氏距离
6 我的特工爷爷 6 4 21 动作片 17.492856
1 美人鱼 21 17 5 喜剧片 18.547237
3 功夫熊猫3 39 0 31 喜剧片 21.470911
0 宝贝当家 45 2 9 喜剧片 23.430749
2 澳门风云3 54 9 11 喜剧片 32.140317
"""
mode=train['电影类型'].mode()[0]
# print(mode)
"""
喜剧片
"""
sklearn方法
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
"""
电影分类数据类型分析 方法k-近邻方法
"""
#加载数据
move=pd.read_excel('./电影分类数据.xlsx')
# print(move)
#获取训练集
train=move.iloc[:,1:6]
# print(train)
#训练集判断条件
plt.rcParams['font.sans-serif']='SimHei'
#或
# train.loc[train.loc[:,'电影类型']=='喜剧片','类别']=0
# train.loc[train.loc[:,'电影类型']=='动作片','类别']=1
# train.loc[train.loc[:,'电影类型']=='爱情片','类别']=2
#获取测试集
test=np.array(move.columns[-4:])
# print(test)
#构建knn实例
k=5
knn=KNeighborsClassifier(n_neighbors=k)
x=train.iloc[:,1:4].values#特征值
y=train.iloc[:,-1].values#目标值
#训练数据
knn.fit(x,y)
#拿出测试数据
test=test[1:]
#预测数据
y_predict=knn.predict([test])#注意维度匹配,这里二维数组
print(y_predict[0])#
"""
喜剧片
"""