(机器学习)使用k-邻近算法实现的两个实例

目录

一.判定未知电影的类型

2 python代码实现 

2.1运行结果:

 二.改进约会网站的配对效果

1. 实例解释

2.数据处理

 3.实现代码:

 4. 运行结果:

总结 


一.判定未知电影的类型

1. 实例解释

以电影分类为例子,使用k-近邻算法分类爱情片和动作片。有人曾经统计过很多电影的打斗镜头和接吻镜头,下图显示了6部电影的打斗和接吻镜头数。 假如有一部未看过的电影,如何确定它是爱情片还是动作片呢? 

①首先需要统计这个未知电影存在多少个打斗镜头和接吻镜头,下图中问号位置是该未知电影出现的镜头数 

②之后计算未知电影与样本集中其他电影的距离(相似度),具体算法先忽略,结果如下表所示:

③将相似度列表排序,选出前k个最相似的样本。此处我们假设k=3,将上表中的相似度进行排序后前3分别是:He’s Not Really into Dudes,Beautiful Woman,California Man。
④统计最相似样本的分类。此处很容易知道这3个样本均为爱情片。
⑤将分类最多的类别作为未知电影的分类。那么我们就得出结论,未知电影属于爱情片。

2 python代码实现 

from numpy import *
import operator

def createDataSet():
    '创建数据集'
    group=array([[3, 104], [2, 100], [1, 81], [101, 10], [99, 5], [98, 2]])
    labels= ['爱情片', '爱情片', '爱情片', '动作片', '动作片', '动作片']
    return group, labels

def classify(inX, dataSet, labels, k):
    # 获取维度
    dataSetSize=dataSet.shape[0]   # 训练数据集数量
    print("训练数据集数量:")
    print(dataSetSize)
    diffMat=tile(inX, (dataSetSize, 1))-dataSet  # 测试样本的各维度的差值
    sqDiffMat=diffMat**2  # 平方计算
    sqDistance=sqDiffMat.sum(axis=1)  # 输出每行的值
    distances=sqDistance**0.5   # 开方计算
    print("与未知电影的距离:")
    print(distances)
    sortedDistances=distances.argsort()  # 返回distances中元素从小到大排序后的索引值
    classCount={}
    for i in range(k):
        voteIlabel=labels[sortedDistances[i]]
        classCount[voteIlabel]=classCount.get(voteIlabel, 0)+1
    sortedClassCount=sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)

    return sortedClassCount[0][0]

if __name__ == '__main__':
    # 创建数据集
    group, labels = createDataSet()
    # 测试集
    test = [18, 90]
    # kNN分类
    test_class = classify(test, group, labels, 3)
    # 打印分类结果
    print("判定未知电影类型:")
    print(test_class)

2.1运行结果:

 二.改进约会网站的配对效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值