本文通过海伦约会的例子来测试之前写的KDTree的效果,并且探讨了特征是否进行归一化对整个模型的表现的影响。
最后发现在机器学习中,特征归一化确实对模型能提供非常大的帮助。
1 from KDTree import KDTree # 参考实现KDtree的随笔
2 from sklearn import model_selection,preprocessing
3 import pandas as pd
4 class KNN(object):
5 def __init__(self,K=1,p=2):
6 self.kdtree= KDTree()
7 self.K =K
8 self.p=p
9 def fit(self,x_data,y_data):
10 self.kdtree.build_tree(x_data,y_data)
11 def predict(self,pre_x,label):
12 if 'class' in label:
13 return self.kdtree.predict_classification(pre_x,K=self.K)
14 else :
15 return self.kdtree.predict_regression(pre_x,K=self.K)
16 def test_check(self,test_xx,test_y):
17 # only support classification problem
18 correct =0
19 for i,xi in enumerate(test_xx):
20 pre_y = self.kdtree.predict_classification(Xi=xi,K=self.K)
21 if pre_y == test_y[i]:
22 correct+=1
23 return correct/len(test_y)
24
25
26 file_path = "datingTestSet.txt"
27 data = pd.read_csv(file_path, sep="\t",header=None)
28 XX = data.iloc[:,:-1].values
29 Y = data.iloc[:,-1].values
30 train_xx , test_xx, train_y,test_y = model_selection.train_test_split(XX,Y,test_size= 0.2,random_state=123,shuffle=True)
31 knn=KNN(K=5,p=2)
32 knn.fit(train_xx,train_y)
33 acc = knn.test_check(test_xx,test_y)
34 print("No Standard Scale Accuracy: ",acc)
35 # 考虑到数据中不同维度之间的数值相差过大,进行特征缩放
36 scaler = preprocessing.StandardScaler()
37 # 计算均值和标准差只能用训练集的数据
38 scaler.fit(train_xx)
39 stand_train_xx = scaler.transform(train_xx)
40 stand_test_xx = scaler.transform(test_xx)
41 new_knn = KNN(K=5,p=2)
42 new_knn.fit(stand_train_xx,train_y)
43 new_acc = new_knn.test_check(stand_test_xx,test_y)
44 print("Standard Scale Accuracy: ",new_acc)

KNN算法实战——海伦约会(KDtree优化)的更多相关文章

  1. KNN 算法-实战篇-如何识别手写数字

    公号:码农充电站pro 主页:https://codeshellme.github.io 上篇文章介绍了KNN 算法的原理,今天来介绍如何使用KNN 算法识别手写数字? 1,手写数字数据集 手写数字数 ...

  2. kNN算法实例(约会对象喜好预测和手写识别)

    import numpy as np import operator import random import os def file2matrix(filePath):#从文本中提取特征矩阵和标签 ...

  3. KNN算法项目实战——改进约会网站的配对效果

    KNN项目实战——改进约会网站的配对效果 1.项目背景: 海伦女士一直使用在线约会网站寻找适合自己的约会对象.尽管约会网站会推荐不同的人选,但她并不是喜欢每一个人.经过一番总结,她发现自己交往过的人可 ...

  4. 秒懂机器学习---k-近邻算法实战

    秒懂机器学习---k-近邻算法实战 一.总结 一句话总结: k临近算法的核心就是:将训练数据映射成k维空间中的点 1.k临近算法怎么解决实际问题? 构建多维空间:每个特征是一维,合起来组成了一个多维空 ...

  5. 《机学五》KNN算法及实例

    一.概述 [定义]如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. 二.距离计算公式 两个样本的距离可以通过如下公式计算,又叫[欧式距 ...

  6. 吴裕雄--天生自然python机器学习实战:K-NN算法约会网站好友喜好预测以及手写数字预测分类实验

    实验设备与软件环境 硬件环境:内存ddr3 4G及以上的x86架构主机一部 系统环境:windows 软件环境:Anaconda2(64位),python3.5,jupyter 内核版本:window ...

  7. 《机器学习实战》kNN算法及约会网站代码详解

    使用kNN算法进行分类的原理是:从训练集中选出离待分类点最近的kkk个点,在这kkk个点中所占比重最大的分类即为该点所在的分类.通常kkk不超过202020 kNN算法步骤: 计算数据集中的点与待分类 ...

  8. k-近邻(KNN)算法改进约会网站的配对效果[Python]

    使用Python实现k-近邻算法的一般流程为: 1.收集数据:提供文本文件 2.准备数据:使用Python解析文本文件,预处理 3.分析数据:可视化处理 4.训练算法:此步骤不适用与k——近邻算法 5 ...

  9. 机器学习实战之kNN算法

    机器学习实战这本书是基于python的,如果我们想要完成python开发,那么python的开发环境必不可少: (1)python3.52,64位,这是我用的python版本 (2)numpy 1.1 ...

  10. 算法代码[置顶] 机器学习实战之KNN算法详解

    改章节笔者在深圳喝咖啡的时候突然想到的...之前就有想写几篇关于算法代码的文章,所以回家到以后就奋笔疾书的写出来发表了 前一段时间介绍了Kmeans聚类,而KNN这个算法刚好是聚类以后经常使用的匹配技 ...

随机推荐

  1. 《Python魔法大冒险》005 魔法挑战:自我介绍机器人

    魔法师和小鱼坐在图书馆的一扇窗户旁,窗外的星空闪烁着神秘的光芒.魔法师轻轻地拍了拍小鱼的肩膀. 魔法师: 小鱼,你已经学会了编写简单的魔法程序,现在我要教你如何创造一个有自己思想的机器人,让它能够和我 ...

  2. nmcli 命令设置网络

    nmcli 命令设置网络 设置静态 IP 地址 sudo nmcli connection modify "连接名称" ipv4.addresses IP地址/子网掩码 设置网关 ...

  3. MIMO雷达中波形复用/分离的方法------TDMA\FDMA\DDMA\CDMA

    最先接触到MIMO雷达的波形复用/分离的方法还是工作中负责的TI1843项目中了解的,主要还是时分多址波形(TDMA),当时刚接触时对这些很疑惑,再加上后面看到了频分多址波形(FDMA).码分多址波形 ...

  4. 「codeforces - 1481F」AB Tree

    link. 理一下逻辑,主要讲一下我做题时的疑惑和其它题解没提到的细节. 首先容易看到,一个必然不劣的贪心策略是把尽量靠近根的层铺成同样的字符.也许会有疑惑,字符串是否本质不同的判定每个位置地位相等. ...

  5. Solution -「LOCAL 28731」「重庆市 2021 中学友谊赛」Rainyrabbit 爱求和

    Description Link. \(\operatorname{Rainyrabbit}\) 是一个数学极好的萌妹子,近期他发现了一个可爱的函数: \[f(n,m,k)=\sum_{d=1}^n ...

  6. JAVA中三种I/O框架——BIO、NIO、AIO

    一.BIO(Blocking I/O) BIO,同步阻塞IO模型,应用程序发起系统调用后会一直等待数据的请求,直至内核从磁盘获取到数据并拷贝到用户空间: 在一般的场景中,多线程模型下的BIO是成本较低 ...

  7. 累死了qwq-一些平时的思考awa

    最近真的有点难受了qwq有的时候没有认可我就是会有点伤心虽然知道就算是全部的人都认可我也没有什么用...但是总归是一个动力的来源.唉有的时候真的好想就这么的放弃信奥啊,毕竟在浙江这种地方,想要那一个奖 ...

  8. Java替换RequestBody和RequestParam参数的属性

    Java替换RequstBody和RequestParam参数的属性 本文主要讲解在Java环境中如何替换RequestBody和RequestParam参数中的属性 背景 近期由于接手的老项目中存在 ...

  9. DFS洛谷4961(求联通块)

    说实话这个题审题把我卡了半天,还是我太菜 直接上代码吧 偷个懒用万能库. #include"bits/stdc++.h" using namespace std; int mp[1 ...

  10. 搞懂闭包JavaScript的GC机制

    其实不管什么语言,都有一套垃圾回收机制.为什么要有垃圾回收机制?因为内存,程序运行需要内存,如果没有垃圾回收(循环引用,内存泄漏),那么内存占用就会越来越高,轻点说会影响性能卡顿,严重的直接导致崩溃. ...