k邻*算法具体应用:2-2约会网站配对

  心得体会:

1.对所有特征值进行归一化处理:将特征值单位带来的距离影响消除,使所有特征同权重——然后对不同的特征进行加权
2.对于相互独立的特征,可以通过建立(特征值—类型 )图表进行计算,但是多个特征值是相互关联的则需要建立多维图表

#2-2约会网站配对

#将文本记录转换为NumPy
def file2matrix(filename):
love_dictionary = {'largeDoses':3, 'smallDoses':2, 'didntLike':1}
fr = open(filename) #打开文件
arrayOLines = fr.readlines() #行组成的数组
numberOfLines = len(arrayOLines) #返回数组元素个数
returnMat = zeros((numberOfLines, 3)) #生成numberOfLines*3的0数组
classLabelVector = [] #数组
index = 0
for line in arrayOLines:
line = line.strip() #除去头尾空格
listFromLine = line.split('\t') #按'\t'分割成数组
returnMat[index, :] = listFromLine[0:3] #从0开始截取3个
if(listFromLine[-1].isdigit()):
classLabelVector.append(int(listFromLine[-1])) #是数字就放数字,存入类型
else:
classLabelVector.append(love_dictionary.get(listFromLine[-1])) #是字符串就转成数字,存入类型
index += 1
return returnMat, classLabelVector import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure() #返回一个图像窗口
ax = fig.add_subplot(111) #在1行1列1号位画子图
datingDataMat,datingLabels=file2matrix("E:/Python/《机器学*实战》代码/Ch02/datingTestSet2.txt")
# print(datingLabels)
# ax.scatter(datingDataMat[:,1], datingDataMat[:,2])
#scatter(x, y, 点的大小, 颜色,标记)
ax.scatter(datingDataMat[:,1], datingDataMat[:,2], 15.0*array(datingLabels),15.0*array(datingLabels),"*")
ax.axis([-2,25,-0.2,2.0]) #[x轴min,x轴max,y轴min,y轴max]
plt.xlabel('game')
plt.ylabel('ice')
# plt.show() # 归一化特征值
# newVal=(oldVal-minVal)/(maxVal-minVal)
def autoNorm(dataSet):
minVals=dataSet.min(0) #得到每一列的最小值(列1min,列2min,列3min)
maxVals=dataSet.max(0) #得到每一列的最大值
ranges=maxVals-minVals
normDataSet=zeros(shape(dataSet))# 建立一个和dataSet一样大小的0矩阵
m=dataSet.shape[0]
normDataSet=dataSet-tile(minVals,(m,1))# tile建立矩阵tile(重复的内容,(在高度上重复,在长度上重复))
normDataSet=normDataSet/tile(ranges,(m,1))
return normDataSet,ranges,minVals normMat,ranges,minVals=autoNorm(datingDataMat) #分类器
def datingClassTest():
hoRatio=0.10 #0.1的数据作为测试
datingDataMat,datingLabels=file2matrix("E:/Python/《机器学*实战》代码/Ch02/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 doses','in large doses']
percentTats=float(input("游戏时间百分比"))
ffMiles=float(input("每年飞行常客里程数"))
iceCream=float(input("每年吃冰淇淋多少升"))
datingDataMat,datingLabels=file2matrix("E:/Python/《机器学*实战》代码/Ch02/datingTestSet2.txt")
normMat,ranges,minVals=autoNorm(datingDataMat)
inArr=array([ffMiles,percentTats,iceCream])
classifierResult=classify0((inArr-minVals)/ranges,normMat,datingLabels,3)
print(resultList[classifierResult-1]) # classifyPerson()
												

【机器学*】k*邻算法-02的更多相关文章

  1. 机器学*——K*邻算法(KNN)

    1 前言 Kjin邻法(k-nearest neighbors,KNN)是一种基本的机器学*方法,采用类似"物以类聚,人以群分"的思想.比如,判断一个人的人品,只需观察他来往最密切 ...

  2. 【机器学*】k-*邻算法(kNN) 学*笔记

    [机器学*]k-*邻算法(kNN) 学*笔记 标签(空格分隔): 机器学* kNN简介 kNN算法是做分类问题的.思想如下: KNN算法的思想总结一下:就是在训练集中数据和标签已知的情况下,输入测试数 ...

  3. 【机器学*】k*邻算法-03

    心得体会: 需要思考如何将现实对象转化为特征向量,设置特征向量时记住鸭子定律1 鸭子定律1 如果走路像鸭子.说话像鸭子.长得像鸭子.啄食也像鸭子,那它肯定就是一只鸭子 事物的外在特征就是事物本质的表现 ...

  4. 【机器学*】k*邻算法-01

    k临*算法(解决分类问题): 已知数据集,以及该数据对应类型 给出一个数据x,在已知数据集中选择最接*x的k条数据,根据这k条数据的类型判断x的类型 具体实现: from numpy import * ...

  5. 【机器学*与R语言】2-懒惰学*K*邻(kNN)

    目录 1.理解使用KNN进行分类 KNN特点 KNN步骤 1)计算距离 2)选择合适的K 3)数据准备 2.用KNN诊断乳腺癌 1)收集数据 2)探索和准备数据 3)训练模型 4)评估模型的性能 5) ...

  6. 02机器学习实战之K近邻算法

    第2章 k-近邻算法 KNN 概述 k-近邻(kNN, k-NearestNeighbor)算法是一种基本分类与回归方法,我们这里只讨论分类问题中的 k-近邻算法. 一句话总结:近朱者赤近墨者黑! k ...

  7. K近邻算法:机器学习萌新必学算法

    摘要:K近邻(k-NearestNeighbor,K-NN)算法是一个有监督的机器学习算法,也被称为K-NN算法,由Cover和Hart于1968年提出,可以用于解决分类问题和回归问题. 1. 为什么 ...

  8. [机器学习系列] k-近邻算法(K–nearest neighbors)

    C++ with Machine Learning -K–nearest neighbors 我本想写C++与人工智能,但是转念一想,人工智能范围太大了,我根本介绍不完也没能力介绍完,所以还是取了他的 ...

  9. 一步步教你轻松学KNN模型算法

    一步步教你轻松学KNN模型算法( 白宁超 2018年7月24日08:52:16 ) 导读:机器学习算法中KNN属于比较简单的典型算法,既可以做聚类又可以做分类使用.本文通过一个模拟的实际案例进行讲解. ...

随机推荐

  1. 日常Java 2021/11/17

    应用程序转换成Applet 将图形化的Java应用程序(是指,使用AWT的应用程序和使用java程序启动器启动的程序)转换成嵌入在web页面里的applet是很简单的.下面是将应用程序转换成.Appl ...

  2. day12 函数嵌套

    day12 函数嵌套 一. args与kwargs def index(a,b,c): print(a,b,c) def wrapper(*args,**kwargs): # args=(1,2,3) ...

  3. day01互联网架构理论

  4. tomcat结合nginx

    相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了 ...

  5. Linux学习 - 关机重启退出命令

    一.shutdown 1 功能 关机.重启操作 2 语法 shutdown  [-chr]  [时间选项] -h 关机 -r 重启 -c 取消前一个关机命令 二.halt.poweroff(关机) 三 ...

  6. java Map集合类

    ---恢复内容开始--- Map提供了一个更通用的元素存储方法,Map集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值. 了解Map接口和方法 ...

  7. jquery datatable真实示例

    1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncodin ...

  8. web管理的Powerdns

    在powerdns服务器上安装相应的包(基于epel源) [root@powerdns ~]# yum install pdns pdns-backend-mysql -y 在master-maira ...

  9. JavaScript对象之面向对象

    在js中创建对象的两种方式 1.new一个Objecteg: var flower = new Object(); flower.stuname = "呵呵"; flower.ag ...

  10. Mysql配置文件 binlog和慢日志

    目录 binlog binlog_format log_slave_updates log-bin|log-bin-index expire_logs_days relay-log|relay-log ...