1.手撸代码篇
import numpy as np
import operator
import collections
"""
函数说明:创建数据集
Parameters:
无
Returns
group-数据集
labels-分类器
Modify:
2018-11-17
DD B A
"""
def createDataSet():
# 四组的二维特征
group=np.array([[1,101],[5,89],[108,5],[80,10]])
# 四组特征对应的标签
labels=['动作片','动作片','爱情片','爱情片']
return group,labels
def classify(inx,dataset,lables,k):
# 计算距离
dist=np.sum((inx-dataset)**2,axis=1)**0.5
print(dist)
print(dist.argsort()[0:3])
k_labels=[labels[index] for index in dist.argsort()[0:k]]
# print(collections.Counter(k_labels).most_common(1)[0][0])
label=collections.Counter(k_labels).most_common(1)[0][0]
return label
if __name__ =='__main__':
# 创建数据集
group,labels=createDataSet()
# print(group)
# print(labels)
test=[100,200]
test_class=classify(test,group,labels,3)
print(test_class)
2.sklearn框架篇
#处理分类问题
from sklearn.neighbors import KNeighborsClassifier
#处理回归问题
from sklearn.neighbors import KNeighborsRegressor
# 构建KNN分类器对象
# n_neighbors 应设置为一个奇数 一般不大于20 表示距离预测样本最近的n个样本点
knnclf=KNeighborsClassifier(n_neighbors=5)
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
#X_train对应的二维数组 第一列为动作镜头数 第二列为接吻镜头数 训练数据
X_train=np.array([[19,1],[2,18],[25,1],[24,3],[3,17],[5,10],[7,8],[5,4],[5,3]])
Y_train=np.array(['动作','爱情','动作','动作','爱情','爱情','爱情','动作','动作'])
display(X_train,Y_train)
# 训练分类器模型
knnclf.fit(X_train,Y_train)
X_test=np.array([[13,10],[5,10]])
# 预测
knnclf.predict(X_test)