本文通过海伦约会的例子来测试之前写的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. C# 异步执行操作

    为了方便测试异步,先加个计时 计时相关(可以直接跳过该部分) //开始计时 Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); // 停 ...

  2. Binary String Copying

    Smiling & Weeping ----第一次见你的时候, 在我的心里已经炸成了烟花, 需要用一生来打扫灰炉. 题目链接:Problem - C - Codeforces 题目大意不难,就 ...

  3. Nginx map 实现时间格式转换

    哈喽大家好,我是咸鱼 最近我们需要把 Nginx 的日志接入到自研的日志采集平台上,但是这个平台只支持 JSON 格式,所以需要把 Nginx 日志格式改成 JSON 格式 例如下面这样的效果 刚开始 ...

  4. elementui vue表单提交向别的组件传参失效 路由传参格式

    目录 表单提交向别的组件传参失效 路由传参格式 表单提交向别的组件传参失效 methods: { submitForm(formName) { this.$refs[formName].validat ...

  5. Vue框架快速上手

    Vue基础 vue指令 内容绑定 v-text 设置标签的内容一般通过双大括号的表达式{{ }}去替换内容 {{ hello }} v-html 与v-text类似区别在于html中的结构会被解析为标 ...

  6. 重写equals方法的注意事项

    重写equals方法的注意事项   一. 在重写equals方法时,要注意满足离散数学上的特性1   自反性:对任意引用值X,x.equals(x)的返回值一定为true.2   对称性:对于任何引用 ...

  7. go 流程控制之switch 语句介绍

    go 流程控制之switch 语句介绍 目录 go 流程控制之switch 语句介绍 一.switch语句介绍 1.1 认识 switch 语句 1.2 基本语法 二.Go语言switch语句中cas ...

  8. CSP 初赛复习

    想要做一些不需要思考也算不得摆烂的事,但发现很难找到符合上述要求的学习内容. 突然想到还剩两天就 CSP 初赛了.虽然在 LN 想过不了初赛纯属搞笑,但为了不让自己的分数太难看还是简单复习一下. 没有 ...

  9. NOI 2023 春季测试 游记

    开坑,待填. upd: 摆,不想填,但还是来填坑了. \(Day -1\) 看板子,什么都不会.发现自己已经不会写十二月刷了一整个题单的线段树合并了,感慨了一下自己连鱼都不如的记忆力,不过反正春测不考 ...

  10. JUC并发编程学习笔记(十)线程池(重点)

    线程池(重点) 线程池:三大方法.七大参数.四种拒绝策略 池化技术 程序的运行,本质:占用系统的资源!优化资源的使用!-> 池化技术(线程池.连接池.对象池......):创建和销毁十分消耗资源 ...