机器学习实战k-近邻算法(kNN)应用之改进婚恋网站配对效果代码解

KNN实战二,约会对象分类 KNN算法实现约会对象分类 import numpy as np import matplotlib.pyplot as plt import day1.KNN.封装KNN函数 as K #第一步,读取数据集,需要将数据分为特征矩阵和对应的分类标签向量 #定义一个函数:打开并解析文件,对数据进行分类,1代表不喜欢,2代表魅力一般,3代表极具魅力 #filename-文件名 #returnMat-特征矩阵 #classLabelVector 分类标签向量 def file2matrix(filen... 阅读详情

一.背景简要说明

问题背景不再详细赘述了,《机器学习实战》中有详细介绍,利用KNN想做的就是训练出一个分类器,能根据对方的一些特征判断他(她)对你的吸引程度,是不喜欢,还是一般喜欢,还是很喜欢。以此改进约会配对效果。

二.模块代码及注释

from numpy import *
import operator

#样本数据集创建函数
def creatDataSet():
    dataSet = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    labels = ['A','A','B','B']
    return dataSet,labels


#k-NN简单实现函数
def classify0(inX,dataSet,labels,k):

    #求出样本集的行数,也就是labels标签的数目
    dataSetSize = dataSet.shape[0]

    #构造输入值和样本集的差值矩阵
    diffMat = tile(inX,(dataSetSize,1)) - dataSet

    #计算欧式距离
    sqDiffMat = diffMat**2
    sqDistances = sqDiffMat.sum(axis=1)
    distances = sqDistances**0.5

    #求距离从小到大排序的序号
    sortedDistIndicies = distances.argsort()

    #对距离最小的k个点统计对应的样本标签
    classCount = {}
    for i in range(k):
        #取第i+1近邻的样本对应的类别标签
        voteIlabel = labels[sortedDistIndicies[i]]
        #以标签为key,标签出现的次数为value将统计到的标签及出现次数写进字典
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1

    #对字典按value从大到小排序
    sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)

    #返回排序后字典中最大value对应的key
    return sortedClassCount[0][0]

#从文本文件中解析数据
def file2matrix(filename):
    fr = open(filename)
    
    #按行读取整个文件的内容
    arrayOfLines = fr.readlines()
    
    #求文件行数,即样本总数
    numberOfLines = len(arrayOfLines)

    #初始化返回数组及列表
    returnMat = zeros((numberOfLines,3))
    classLabelVector = []
    
    index = 0
    for line in arrayOfLines:
        #截取掉每一行的回车符
        line = line.strip()
        #将一行数据根据制表符分割成包含多个元素(特征)的列表
        listFromLine = line.split('\t')
        #分割后的特征数据列表存入待返回的numpy数组
        returnMat[index,:] = listFromLine[0:3]
        #将文件每一行最后一列的数据存入待返回的分类标签列表
        classLabelVector.append(int(listFromLine[-1]))
        #控制待返回的numpy数组进入下一行
        index+=1
    return returnMat,classLabelVector

#特征变量归一化
def autoNorm(dataSet):

    #取出每一列的最小值,即每一个特征的最小值
    minVals = dataSet.min(0)

    #取出每一列的最大值,即每一个特征的最大值
    maxVals = dataSet.max(0)

    #每一个特征变量的变化范围
    ranges = maxVals - minVals

    #初始化待返回的归一化特征数据集
    normDataSet = zeros(shape(dataSet))

    #特征数据集行数,即样本个数
    m = dataSet.shape[0]

    #利用tile()函数构造与原特征数据集同大小的矩阵,并进行归一化计算
    normDataSet = dataSet - tile(minVals,(m,1))
    normDataSet = normDataSet/tile(ranges,(m,1))

    return normDataSet,ranges,minVals

#分类器测试
def datingClassTest():

    #给定用于测试分类器的样本比例
    hoRatio = 0.10

    #调用文本数据解析函数
    datingDataMat,datingLabels = file2matrix('F:/programming tools/datingTestSet2.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 classifier came back with: %d,the real answer is: %d" % (classifierResult,datingLabels[i]))

        #统计分类出错的测试样本数
        if (classifierResult != datingLabels[i]):
            errorCount+=1.0

    #输出分类器错误率        
    print("the total error rate is: %f" % (errorCount/float(numTestVecs)))

#约会网站对新输入分类
def classifyPerson():

    #定义一个存储了三个字符串的列表,分别对应不喜欢,一般喜欢,很喜欢
    resultList = ['not at all','in small dose','in large dose']

    #用户输入三个特征变量,并将输入的字符串类型
datingTestSet2.txt 机器学习实战knn需要的训练集 立即下载

相关推荐

datingtestset2.txt

这是博客机器学习 & python 使用k-近邻算法改进约会网站的配对效果配套的文本文件

一个测试缘分的JAVA程序

一个测试缘分的JAVA程序,

基于企业微信客服与GPT-3构建合规微信AI助手:从原理到部署实践

在人工智能与即时通讯融合的浪潮中,自然语言处理(NLP)与API集成成为构建智能对话系统的核心技术。其原理在于通过API网关接收用户输入,调用云端大语言模型进行处理,再将结果返回给用户,实现自动化交互。这项技术的核心价值在于将前沿AI能力无缝嵌入到日常高频应用场景中,极大地提升了客服自动化、智能问答与个性化服务的效率与体验。企业微信作为官方认可的企服平台,其开放的客服API接口为开发者提供了稳定、合规的消息通道,是连接微信生态与外部AI服务的理想桥梁。本文聚焦于如何利用企业微信客服API与OpenAI的GP

weixin_28727943的博客 628

5分钟搞定:用Ollama在MacBook上本地运行Qwen3大模型(附避坑指南)

本文详细介绍了如何在MacBook上使用Ollama快速部署和运行Qwen3大模型,包括安装步骤、性能优化技巧及常见问题解决方案。Ollama作为一款轻量级工具,特别适合M系列芯片的Mac用户,支持多种量化版本,显著降低资源消耗,提升推理速度。

sql99的博客 822

ArcGIS插值可视化气象数据

前言 地图底图的制作和气象数据的预处理见我上两篇博客 ArcGIS精美中国地图制作(详解) python处理日值气象数据 在前面我们已经将日值的地温数据处理成了年均地温,添加了站点经纬度坐标并导出为excel格式。 得到如下数据: 导入数据 在Arcmap中 文件-添加XY数据 将年均地温和站点位置数据导入。 注意:excel表格的格式要另存为97-2003工作簿形式,否则会有"arcgi...

江北20190411的博客 2万+

快速搭建SpringBoot3+Vue3+ElementPlus管理系统

快速搭建SpringBoot3+Vue3管理系统前端项目搭建(默认开发环境:node20,Jdk17)创建项目并下载依赖--执行以下命令 前端项目搭建(默认开发环境:node20,Jdk17) 创建项目并下载依赖–执行以下命令 创建项目 yarn create vite admin-vue --template 2.下载依赖(也可按需下载) yarn add echarts --save yarn add vue-router --save yarn add element-plus --save y

adingyb的博客 2817

Linux | Ubuntu18.04安装RTX 4060显卡驱动完整教程

本节详细介绍了如何在ubuntu18系统安装4060显卡的驱动。

九七的博客 5160

隧道裂缝检测【C++PCL】

我们团队注重每一个细节,确保代码的可读性、可维护性和可扩展性达到最高标准。我们严格遵循行业最佳实践,采用模块化和面向对象的设计原则,使得我们的代码结构清晰且易于理解。我们的点云服务更是引以为傲。我们的技术团队拥有深厚的专业知识和丰富的经验,能够提供高度准确和高效的点云处理服务。无论是点云的获取、存储还是分析,我们都能够满足客户的需求,并提供出色的解决方案。我们的技术实力也是无与伦比的,拥有广泛的技术背景和深入的专业知识。

weixin_45196569的博客 849

CLCD 中国生命周期基础数据库使用攻略

CLCD 是公共建筑碳排放计算的理想选择,其本地化数据可显著提高计算准确性。

hy行者勇哥的博客 2688

微信商家转账报错“当前使用用户过多,请稍后重新确认收款”解决方案

当前使用用户过多,请稍后重新确认收款”这个错误,其实就是典型的参数误处理导致的假报错。记住一句话就行👇JSAPI 场景下的package参数不要做 UrlEncode。如果你也遇到这个问题,希望这篇文章能帮你少踩一个坑。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 785

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: windows下python绘图库matplotlib安装方法(亲测)
下一篇: Andrew Ng机器学习入门学习笔记(四)之神经网络(一)
SCUT_Arucee
博客等级 码龄12年 115粉丝 20原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值