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. 点击下拉选择触发事件【c#】

    <asp:DropDownList ID="ddlRegionList" runat="server" AutoPostBack="true&q ...

  2. Linux网络(网络模型和收发流程)

    网络模型 为了解决网络互联中异构设备的兼容性问题,并解耦复杂的网络包处理流程,国际标准化组织制定的开放式系统互联通信参考模型(Open System Interconnection Reference ...

  3. 零基础学习java------23---------动态代理,ip,url案例

    1. 动态代理 2. ip,url案例 给定的access.log是电信运营商的用户上网数据,第一个字段是时间, 第二个字段是ip地址,第三个字段是访问的网站,其他字段可以忽略不计. 第一个字段是网段 ...

  4. pyqt5的下拉菜单,可以进行输入文字

  5. POST/GET请求中RequestBody和RequestParam的应用场景

    POST请求时 @RequestBody --> JSON字符串部分 @RequestParam --> 请求参数部分 application/json格局图   图一.png form- ...

  6. 【编程思想】【设计模式】【创建模式creational】Borg/Monostate

    Python版 https://github.com/faif/python-patterns/blob/master/creational/borg.py #!/usr/bin/env python ...

  7. C++易错小结

    C++ 11 vector 遍历方法小结 方法零,对C念念不舍的童鞋们习惯的写法: void ShowVec(const vector<int>& valList) { int c ...

  8. 根据注释生成xml和从nuget包中复制xml显示到swagger

    生成xml到输出目录 从注释生成xml 在要生成xml的项目的csproj中添加如下代码, 生成的xml名称为项目名称.xml. 比如该项目叫做Abp.Application, 则xml名为 Abp. ...

  9. Groovy获取Bean两种方式(奇淫技巧操作)

    前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 背景: 在Java代码中当我们需要一个Bean对象,通常会使用spring中@Autowired注解,用来自动装配对象. 在Groovy ...

  10. Redis慢查询配置和优化

    目录 一.介绍 二.参数配置 sql动态配置 配置文件设置 三.sql操作 四.优化 一.介绍 慢查询只记录redis执行时间,并不记录redis服务到客户端之间的网络问题. 超过多少毫秒的才被记录 ...