KNN算法电影分类

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)

猜你喜欢

转载自blog.csdn.net/weixin_40903057/article/details/84281216