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的第二天!

    一.今日收获 1.了解了eclipse的具体使用方法. 2.学习了Java程序设计完全手册的第一章内容,明白了相关知识. 3.通过看哔哩哔哩的java的教程视频了解了Dos命令及java的变量和常量. ...

  2. A Child's History of England.48

    A few could not resolve to do this, but the greater part complied. They made a blazing heap of all t ...

  3. Hbase(6)【Java Api Phoenix操作Hbase】

    目录 两种方式操作Phoenix 1.Thick Driver 2.Thin Driver 3.注意事项 两种方式操作Phoenix 官网:http://phoenix.apache.org/faq. ...

  4. Java Swing布局管理器GridBagLayout的使用示例 [转]

    GridBagLayout是java里面最重要的布局管理器之一,可以做出很复杂的布局,可以说GridBagLayout是必须要学好的的, GridBagLayout 类是一个灵活的布局管理器,它不要求 ...

  5. [学习总结]4、Android的ViewGroup中事件的传递机制(一)

    本文主要针对dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent三个方法,通过简单的例子来简单的介绍下. 根据字面意思的理解,dispatchTo ...

  6. Android获取通知栏的高度

    1 public static int getStatusBarHeight(Context context){ 2         Class<?> c = null; 3        ...

  7. jenkins之代码回滚

    #:通过传参数方式 #:保存后就会看到这样 #;:我们在jenkins服务器写一个脚本 root@ubuntu:~# mkdir /root/script/web1 -pv mkdir: create ...

  8. Linux:$?,$n,$#,$0

    $? 获取执行上一个指令的返回值(0为成功,非零为失败) $n 获取当前执行的shell脚本的第n个参数值,n=1...9,当n=0的时表示脚本的文件名,如果n大于9,大括号括起来${10} $# 获 ...

  9. UIImageView总结

    UIImageView UIKit框架提供了非常多的UI控件,但并不是每一个都很常用,有些控件可能1年内都用不上,有些控件天天用,比如UIButton.UILabel.UIImageView.UITa ...

  10. dom4j解析XML学习

    原理:把dom与SAX进行了封装 优点:JDOM的一个智能分支.扩充了其灵活性增加了一些额外的功能. package com.dom4j.xml; import java.io.FileNotFoun ...