数据挖掘算法学习笔记汇总

数据挖掘算法(一)–K近邻算法 (KNN)

数据挖掘算法(二)–决策树

数据挖掘算法(三)–logistic回归

算法简介

KNN算法的训练样本是多维特征空间向量,其中每个训练样本带有一个类别标签。算法的训练阶段只包含存储的特征向量和训练样本的标签。

在分类阶段,k是一个用户定义的常数。一个没有类别标签的向量(查询或测试点)将被归类为最接近该点的k个样本点中最频繁使用的一类。

一般情况下,将欧氏距离作为距离度量

d=(x1−x2)2+(y1−y2)2−−−−−−−−−−−−−−−−−−−√

但是这是只适用于连续变量。在文本分类这种离散变量情况下,另一个度量——重叠度量(或海明距离)可以用来作为度量。例如对于基因表达微阵列数据,k-NN也与Pearson和Spearman相关系数结合起来使用。通常情况下,如果运用一些特殊的算法来计算度量的话,k近邻分类精度可显著提高,如运用大间隔最近邻居或者邻里成分分析法。

算法流程 简述

1、计算待分类点与已知类别数据集中每个点的距离;

2、按照距离递增次序排序;

3、选取与待分类点距离最小的k个点;

4、确定前k个点类别出现的频率;

5、返回前k个点出现频率最高的类别作为当前待分类点的预测分类。

代码

主要自己利用python代码实现了一遍KNN算法,另外也使用了sklearn的neighbors进行计算,学习sklearn包怎么使用。

本文代码运行环境:

python:3.5.1

pandas:0.19.2

sklearn:0.18.1

其他环境可能有细微差别

# -*coding:utf-8*-
import numpy as np
import pandas as pd
import operator
from sklearn import neighbors def weight(onedata):
#作为下面的pd.read_csv的转换函数
if onedata == 'largeDoses':
return 3
elif onedata == 'smallDoses':
return 2
else:
return 1 def autoNorm(dataFrame):
minValues = dataFrame.min(0) # 获取一列的最小值
maxValues = dataFrame.max(0) # 获取一列的最大值
ranges = maxValues - minValues
m = dataFrame.shape[0]
dataFrame = dataFrame - np.tile(minValues, (m, 1))
dataFrame = dataFrame / np.tile(ranges, (m, 1))
return dataFrame, ranges, minValues def classify0(input, dataSet, labels, k):
rowNum = dataSet.shape[0]
diffMat = np.tile(input, (rowNum, 1)) - dataSet
sqDiffMat = diffMat ** 2
sqDistances = sqDiffMat.sum(axis=1) # 求每一行的和
distances = sqDistances ** 0.5 # 计算得到欧式距离
sortedDistIndicies = distances.argsort()
classCount = {}
for i in range(k):
voteIlabel = labels[sortedDistIndicies.index[sortedDistIndicies.values[i]]]
classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0] # 读取数据
data = pd.read_csv("./datingTestSet.txt", sep='\t', header=None, converters={3: weight})
# 归一化数据
normData, ranges, minValues = autoNorm(data.iloc[:, 0:3])
# 利用后50%作为训练数据,前50%作为测试数据
Percent = 0.50
m = normData.shape[0]
numTest = int(m * Percent)
errorCount = 0.0 for i in range(numTest):
classifierResult = classify0(normData.iloc[i, :], normData.iloc[numTest:m, :], data.iloc[numTest:m, 3], 3)
# print("KNN计算值: %d, 真实值: %d" % (classifierResult, data.iloc[i, 3]))
if classifierResult != data.iloc[i, 3]:
errorCount += 1.0
print("KNN的正确率: %f" % (1 - errorCount / float(numTest))) clf = neighbors.KNeighborsClassifier(3)
classifierResult = clf.fit(normData.iloc[numTest:m, :], data.iloc[numTest:m, 3])
score = clf.score(normData.iloc[0:numTest, :], data.iloc[0:numTest, 3])
print("sklearn的正确率: %f"% score)

运行结果

KNN的正确率: 0.920000
sklearn的正确率: 0.936000

代码和测试数据下载地址:

链接:http://pan.baidu.com/s/1kU8rEcR 密码:w57h

参考资料:

1、《机器学习实战》

2、wiki

欢迎python爱好者加入:学习交流群 667279387

数据挖掘算法(一)--K近邻算法 (KNN)的更多相关文章

  1. 机器学习——KNN算法(k近邻算法)

    一 KNN算法 1. KNN算法简介 KNN(K-Nearest Neighbor)工作原理:存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分 ...

  2. 【分类算法】K近邻(KNN) ——kd树(转载)

    K近邻(KNN)的核心算法是kd树,转载如下几个链接: [量化课堂]一只兔子帮你理解 kNN [量化课堂]kd 树算法之思路篇 [量化课堂]kd 树算法之详细篇

  3. 机器学习算法之K近邻算法

    0x00 概述   K近邻算法是机器学习中非常重要的分类算法.可利用K近邻基于不同的特征提取方式来检测异常操作,比如使用K近邻检测Rootkit,使用K近邻检测webshell等. 0x01 原理   ...

  4. Python实现机器学习算法:K近邻算法

    ''' 数据集:Mnist 训练集数量:60000 测试集数量:10000(实际使用:200) ''' import numpy as np import time def loadData(file ...

  5. 【机器学习】k近邻算法(kNN)

    一.写在前面 本系列是对之前机器学习笔记的一个总结,这里只针对最基础的经典机器学习算法,对其本身的要点进行笔记总结,具体到算法的详细过程可以参见其他参考资料和书籍,这里顺便推荐一下Machine Le ...

  6. 从K近邻算法谈到KD树、SIFT+BBF算法

    转自 http://blog.csdn.net/v_july_v/article/details/8203674 ,感谢july的辛勤劳动 前言 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章 ...

  7. <转>从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

    转自 http://blog.csdn.net/likika2012/article/details/39619687 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章待写:1.KD树:2.神经 ...

  8. 用Python从零开始实现K近邻算法

    KNN算法的定义: KNN通过测量不同样本的特征值之间的距离进行分类.它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别.K通 ...

  9. 从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

    转载自:http://blog.csdn.net/v_july_v/article/details/8203674/ 从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 前言 前两日,在微博上说: ...

  10. 机器学习随笔01 - k近邻算法

    算法名称: k近邻算法 (kNN: k-Nearest Neighbor) 问题提出: 根据已有对象的归类数据,给新对象(事物)归类. 核心思想: 将对象分解为特征,因为对象的特征决定了事对象的分类. ...

随机推荐

  1. lenovo ubuntu18.04 找不到网络适配器

    链接: https://pan.baidu.com/s/1YJl-MfG0tVy9sLx4_otmnA 提取码: smfp https://blog.csdn.net/John_chaos/artic ...

  2. 阿里云开源 image-syncer 工具,容器镜像迁移同步的终极利器

    为什么要做这个工具? 由于阿里云上的容器服务 ACK 在使用成本.运维成本.方便性.长期稳定性上大大超过公司自建自维护 Kubernets 集群,有不少公司纷纷想把之前自己维护 Kubernetes ...

  3. Worktile正式发布全新研发产品!

    经过近一年时间的打磨,Worktile研发产品正式发布啦!和以往Worktile版本升级不同的是,这是一个全新的产品形态,目前已上线 Agile(敏捷开发).Pipe(持续交付).Testhub(测试 ...

  4. windows版本 MongoDB副本集搭建及开启身份验证

    ------------恢复内容开始------------ ------------恢复内容开始------------ MongoDB副本集搭建 我搭建的是一个主节点,两个副节点 构建目录结构如下 ...

  5. 看淡生死,不服就干(C语言指针)

    看淡生死,不服就干 emmmmm 其实今天蛮烦的 高等数学考的一塌糊涂 会的不会的都没写 真心没有高中轻松了啊 也不知道自己立的flag还能不能实现 既然选择了就一定坚持下去啊 下面还是放一段之前写的 ...

  6. 【原】android【手机】屏幕适配解决方案,完美适配适配hdpi,xhdpi,xxhdpi的做法。

    1.先说要怎么做,后面在慢慢讲解: 2.现在来讲解为什么要放这三套: 这三套其实按内容来说就两种,为什么这两种可以适配hdpi,xhdpi,xxhdpi呢? 那么两种类型的dimens就可以了,为什么 ...

  7. [FPGA]浅谈LCD1602字符型液晶显示器(Verilog)

    目录 概述 LCD1602 LCD1602是什么? LCD1602的管脚 RS_数据/命令选择 E_使能 D0-D7 LCD1602有个DDRAM LCD1602还有个CGROM 指令集 清屏 进入模 ...

  8. postgresql12 b-tree v4空间上和性能上的优化

    在 pg v11 和 v12 上 常见测试用例 CREATE TABLE rel ( a bigint NOT NULL, b bigint NOT NULL ); ALTER TABLE rel A ...

  9. 2019-9-10:渗透测试,基础学习,nmap扫描命令,php基本语法学习,笔记

    nmap参数-sT,使用tcp全连接的方式 ,扫描过程需要三次握手,建立链接,则说明端口开放,扫描速度慢-sS,使用syn的数据包去检测,接收到ACK说明端口开放-sN,null扫描,发出去的数据包不 ...

  10. Spring与Redis整合(spring-data-redis)

    maven依赖 <properties> <!-- redis 版本 --> <redis.version>2.9.0</redis.version> ...