机器学习——KNN算法(二)
来源:互联网 发布:用户行为分析软件 编辑:程序博客网 时间:2024/05/28 15:50
接着上次的博客,再讲讲KNN算法的具体应用。这里用到了书本中提供的数据集datingTestSet2。
数据集的有三个特征,第四列是类别标签。但是仔细观察会发现第一列的数值明显比其他两列大,这就回造成一个问题就是,当计算位置数据与数据集中每个数据的距离时,第一个参数的作用远大于其他两列,这就需要将数据进行归一化。在之前先要将txt文件中的数据转化为一个矩阵。
def file2matrix(filename): with open(filename) as fr: arrayOLines = fr.readlines() numberOfLines = len(arrayOLines) returnMat = zeros((numberOfLines, 3)) classLabelVector = [] index = 0 for line in arrayOLines: line = line.strip() listFromLine = line.split("\t") returnMat[index, :] = listFromLine[0:3] classLabelVector.append(int(listFromLine[-1])) index += 1 return returnMat, classLabelVector
在进行归一化,归一化公式为newvalue = (oldvalue - min) / (max - min),得到的新值得范围为0~1,具体代码如下。
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
def datingClassTest(): hoRatio = 0.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.0 print "the total error rate is: %f" % (errorCount / float(numTestVecs))
运行一下的结果:
0 0
- 机器学习——KNN算法(二)
- 白话机器学习算法(二)KNN
- 白话机器学习算法(二)KNN
- 机器学习(4)——KNN算法及手写数字的识别(二)
- 机器学习算法——KNN
- 机器学习实战——kNN算法
- 机器学习之一——kNN算法
- 机器学习算法——KNN
- 机器学习算法——KNN
- 机器学习实战——kNN算法
- 机器学习实战—实施kNN算法
- 机器学习实战—笔记-kNN算法
- 机器学习笔记——(1)kNN算法
- 机器学习——K近邻算法(KNN)
- 机器学习实战(一)——kNN算法
- 机器学习实战——k-近邻算法(KNN)
- 机器学习——K-近邻(KNN)算法
- 机器学习——K-近邻(KNN)算法
- Cocos2d-js 3.0 alp2 使用指南
- C++堆上申请二维数组
- 随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比、实现对比
- 疯狂单片机--用C++写STM32程序-OLED
- 出色技术团队的关键要素
- 机器学习——KNN算法(二)
- 10.2 组合
- WD
- mappingResources和mappingLocations
- LeetCode -- Triangle 路径求最小和( 动态规划问题)
- Linux IGMP PROXY 学习笔记 之 一 igmp proxy相关的数据结构及igmp proxy的大致实现要点
- DM8168 HDVPSS中的显示输出
- 《Linux内核设计与实现》笔记-1-linux内核简介
- 007daigou在csdn博客开通啦!