美文网首页机器学习
K近邻算法实例-约会问题

K近邻算法实例-约会问题

作者: CSTDOG | 来源:发表于2019-03-03 15:26 被阅读0次

实例:改进约会网站的匹配效果

  • 案例描述:Hellen一直使用在线约会网站寻找适合自己的约会对象,尽管约会网站会推荐不同的人选,但是她并不喜欢每一个人。经过一番总结,她发现可以将约会过的人分为三种类型:
    • 不喜欢的人
    • 魅力一般的人
    • 极有魅力的人
  • 实验步骤
image.png

准备数据:从文本文件中解析数据

  • 把文本文件数据读入为矩阵数据
    • 步骤:
      • 得到文件行数
      • 创建返回的Numpy矩阵
      • 解析文件数据到列表
    • 代码:
# Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
# 注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
# listFromLine[-1]:listFromLine的最后一个元素
# numpy的优势:NumPy是专门的数组语言,用其操作数组,可以省去很多循环语句,代码比使用Python列表简单得多。
# 从文本中解析数据
def file2matrix(filename):
    fr = open(filename)
    arrayOLines = fr.readlines()
    numberOfLines = len(arrayOLines)
    # 一个二维数据
    returnMat = zeros((numberOfLines,3))
    classLabelVector =[]
    for line in arrayOLines:
        line = line.strip()
        listFromLine = line.split('\t')
        returnMat[index,:] = listFromLine
        classLabelVector.append(int(listFromLine[-1]))
        index = index + 1
    return returnMat,classLabelVector
  • 分析数据:画出各列数据的带标签散点图,观察不同列的分类效果
  • 归一化数值:由于各列数据之间的数量级差异较大,直接使用欧式定理进行距离计算时会导致较大的误差,因此为了减少误差可以进行简单的归一化操作,把数据压缩到[0,1]或者[-1,1]范围,公式:newvalue=(oldvalue-min)/(max-min)
# 归一化数值
# tile(minvals,(m,1))建立并返回一个数组,重复minvals m行1列
def autoNorm(dataSet):
    minvals = dataSet.min(0)
    maxvals = dataSet.max(0)
    ranges = maxvals - minvals
    normDataSet = zeros(shape(dataSet))
    m = dataSet.shape[0]
    normDataSet = dataSet- tile(minvals,(m,1))
    normDataSet = normDataSet/tile(ranges,(m,1))
    return normDataSet, ranges, minvals
  • 测试算法:测试分类器的效果
    • 代码:
# 测试算法:一个完整的程序验证分类器
# hoRatio:测试数据占总数据比例
def datingClassTest():
     hoRatio = 0.1
     datingDataMat, datingLabels = file2matrix('datingTestSet.txt')
     normMat, ranges,minvals = autoNorm(datingDataMat)
     m = normMat.shape[0]
     numTestVecs = int(m*hoRatio)
     errorCount = 0.0
     for i in range(numTestVecs):
         classifierResult = classify0(normMat[i,:],normMat[numTestVecs:m,:],datingLabels[numTestVecs:m],3)
         print("the classfier came back with:"+ classifierResult+",the real answer is "+ datingLabels[i])
         if(classifierResult != datingLabels[i]):
             errorCount += 1.0
     print("error rate is ", errorCount/numTestVecs)

参考书籍:机器学习实战 Perer Harrington

相关文章

  • K近邻算法实例-约会问题

    实例:改进约会网站的匹配效果 案例描述:Hellen一直使用在线约会网站寻找适合自己的约会对象,尽管约会网站会推荐...

  • K-近邻算法

    K-近邻算法 k-近邻算法简单、直观:给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的k个实...

  • K近邻(k-NN)

    一、K近邻算法的基本概念 K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K...

  • K近邻

    一、模型 1.1概念 k-近邻算法是一种基本分类与回归方法,我们这里只讨论分类问题中的 k-近邻算法。k-近邻算法...

  • 《机器学习实战》——使用k-近邻算法改进约会网站的配对效果

    原文转载自我的博客benym.cn 实例:在约会网站上使用k-近邻算法 (1) 收集数据:提供文本文件。(2) 准...

  • k近邻算法实例

    目录 算法简介[1][h1]通俗解释[h-1]算法实现原理[h-2]谁才是“我”的邻居?[h-3]sklearn的...

  • 机器学习(一)——KNN算法之约会网站匹配效果

    【实验目的】 为了熟悉和掌握K近邻算法,改进约会网站的匹配策略。 【实验要求】 用KNN算法改进约会网站的配对效果...

  • 统计学习方法之kNN算法

    k 近邻是什么 k 近邻法是机器学习中最基本的分类和回归方法,也称为kNN算法。通常k近邻法用于分类问题。k近邻法...

  • “k 近邻算法”综述

    “k 近邻算法”综述 本来题目想叫“白话 k 近邻算法”,后来想想,“k 近邻算法” 的描述几乎就是“白话”,所以...

  • k 近邻法

    k 近邻法 k 近邻算法 k 近邻模型 k 近邻法的实现:kd 树 搜索 kd 树 k 近邻模型实现 k 近邻模型...

网友评论

    本文标题:K近邻算法实例-约会问题

    本文链接:https://www.haomeiwen.com/subject/kkapuqtx.html