机器学习-----knn算法--改进约会网站的配对效果

目标:

  • 不喜欢的人
  • 魅力一般的人
  • 极具魅力的人
(1)读取数据
 
from numpy import *
def file2matrix(filename):
    fr=open(filename)
    arrayOlines=fr.readlines()
    numberOflines=len(arrayOlines)  #返回列表长度
    returnMat=zeros((numberOflines,3))  #生成ndarray数组
    classLabelVector=[]
    index=0
    for line in arrayOlines: #遍历样本条
        line=line.strip()#去掉字符串首尾指定字符,去掉回车符
        listFromLine=line.split('\t')#将整行元素分割成元素列表
        returnMat[index,:]=listFromLine[0:3]#定义X  
        classLabelVector.append(int(listFromLine[-1]))#定义y
        index+=1
    return returnMat,classLabelVector
(2)对数据进行可视化分析
type1_x=[]
type1_y=[]
type2_x=[]
type2_y=[]
type3_x=[]
type3_y=[]
for i in range(len(datingLabels)):
    if datingLabels[i]==1:
        type1_x.append(datingDataMat[i][1])
        type1_y.append(datingDataMat[i][2])
    elif datingLabels[i]==2:
        type2_x.append(datingDataMat[i][1])
        type2_y.append(datingDataMat[i][2])
    elif datingLabels[i]==3:
        type3_x.append(datingDataMat[i][1])
        type3_y.append(datingDataMat[i][2])
import matplotlib 
import matplotlib.pyplot as plt
fig=plt.figure()
ax=fig.add_subplot(111)   
type1=ax.scatter(type1_x,type1_y,s=20,c='red')
type2=ax.scatter(type2_x,type2_y,s=30,c='blue')
type3=ax.scatter(type3_x,type3_y,s=40,c='yellow')
ax.legend((type1,type2,type3),('不喜欢','魅力一般','极具魅力'),loc=0)  ##0表示自动寻找最佳位置
matplotlib.rcParams['font.family']='simHei'   
#matplotlib不能直接在图中输入中文,通过更改配置文件将字体改为简体黑体,matplotlib.rc_params查看配置文件,配置文件以字典的形式储存
plt.xlabel('玩视频游戏所耗时间百分比')
plt.ylabel('每周消耗的冰淇淋公斤数')
plt.show()

(3)数据的量纲造成了变量的权重不同,因此对变量进行标准化

newValue=(oldValue-min)/(max-min)

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

(4)测试knn分类效果

def datingClassTest():
    hoRatio=0.1     #测试集的数量为总样本的10%
    datingDataMat,datingLabels=file2matrix('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
    print( "the total error rate is: %f" % (errorCount/float(numTestVecs)) )

(4)构建完整可用系统(输入信息给出她对对方喜欢程度的预测值)

def classifyPerson():
    resultList=['not in all','in small doses','in large doses']
    percentTats=float(input('percentage of time spent playing video games?'))
    ffMiles=float(input('frequent flier miles earned per year?'))   ##python3将raw_input和input合并了
    iceCream=float(input('liters of ice cream consumed per year?'))
    datingDataMat,datingLabels=file2matrix('datingTestSet2.txt')
    normMat,ranges,minVals=autoNorm(datingDataMat)
    inArr=array([ffMiles,percentTats,iceCream])  #训练街样本是nd.array形式
    classifierResult=classify0((inArr-minVals)/ranges,normMat,datingLabels,3)
    print('you will probably like this person:',resultList[classifierResult-1])   #classifierResult得到的结果是1,2,3




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值