基本概念

先简单介绍一下机器学习里面的两个概念

1.分类与回归

分类模型和回归模型本质一样,分类模型是将回归模型的输出离散化。

一般来说,回归问题通常是用来预测一个值,如预测房价、未来的天气情况等等,例如一个产品的实际价格为500元,通过回归分析预测值为499元,我们认为这是一个比较好的回归分析。回归是对真实值的一种逼近预测。

分类问题是用于将事物打上一个标签,通常结果为离散值。例如判断一幅图片上的动物是一只猫还是一只狗。分类并没有逼近的概念,最终正确结果只有一个,错误的就是错误的,不会有相近的概念。

简言之:

定量输出称为回归,或者说是连续变量预测,预测明天的气温是多少度,这是一个回归任务 定性输出称为分类,或者说是离散变量预测,预测明天是阴、晴还是雨,就是一个分类任务

2.拟合

泛化:如果一个模型能够对没见过的新数据作出准确预测,我们就能够说它能够从训练集泛化到测试集

拟合:模型是否可以很好的描述某些样本,并且有较好的泛化能力

欠拟合:测试样本的特性没有学到,或模型过于简单无法拟合

过拟合:太过贴近于训练数据的特性,在训练集上优秀,但在测试集上不行,不具有泛化性

算法简介

KNN回归

KNN算法不仅可以用于分类,还可以用于回归。通过找出一个样本的k个最近邻居,将这些邻居的某个(些)属性的平均值赋给该样本,就可以得到该样本对应属性的值。

knn分类实操可以参考这一篇文章:k邻近算法-分类实操

数据来源

该数据包含2017年到2019年的鳄梨单价,每次出售的重量,鳄梨种类,产地等信息。

Tips:4046,4225,4770是国外进口水果的plu码,plu四位码代表鳄梨的产地,种类,大小等水果信息,所以4046,4225,4770就是代表三种鳄梨。 ~~有一说一,平常买水果还真没注意到这个。又知道了一个无用的小知识。~~

数据挖掘

1.导入第三方库

import pandas as pd

import numpy as np

from sklearn.model_selection import train_test_split#导入划分数据集的模块

from sklearn.neighbors import KNeighborsRegressor#导入knn回归算法

from sklearn.metrics import r2_score

老规矩,上来先依次导入建模需要的各个模块,除了前四个库是数据挖掘必要的第三方库之外,重点说一下r2_score:sklearn.metrics.r2_score(y_true, y_pred, sample_weight=None, multioutput='uniform_average') y_true:观测值 y_pred:预测值 sample_weight:样本权重,默认None multioutput:多维输入输出,可选‘raw_values’, ‘uniform_average’, ‘variance_weighted’或None。默认为’uniform_average’; raw_values:分别返回各维度得分 uniform_average:各输出维度得分的平均 variance_weighted:对所有输出的分数进行平均,并根据每个输出的方差进行加权。

r2_score评分是主要的回归模型评分方式,具体原理就不多做介绍了,感兴趣的朋友可以查看这篇文章:深度研究:回归模型评价指标R2_score

2.读取文件

import winreg

real_address = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',)

file_address=winreg.QueryValueEx(real_address, "Desktop")[0]

file_address+='\\'

file_origin=file_address+"\\源数据-分析\\avocado.csv"#设立源数据文件的桌面绝对路径

glass=pd.read_csv(file_origin)#https://www.kaggle.com/neuromusic/avocado-prices

因为之前每次下载数据之后都要将文件转移到python根目录里面,或者到下载文件夹里面去读取,很麻烦。所以我通过winreg库,来设立绝对桌面路径,这样只要把数据下载到桌面上,或者粘到桌面上的特定文件夹里面去读取就好了,不会跟其它数据搞混。

3.清洗数据

avocado.groupby(avocado["year"])["year"].count()

avocado_2017=avocado[avocado["year"]==2017].reset_index()

这里我们选择2017年的数据作为建模数据。~~(有的时候数据量太多反而会造成一些噪音干扰)~~

avocado_2017=avocado_2017.replace({"type":{"conventional":0}})

avocado_2017=avocado_2017.replace({"type":{"organic":1}})

a=pd.DataFrame(avocado_2017.groupby(avocado_2017["region"])["region"].count())

a["replace_num"]=range(len(a.index))

for i in range(len(a.index)):

avocado_2017=avocado_2017.replace({"region":{a.index[i]:a.loc[a.index[i],"replace_num"]}})

###注意这里在利用.loc进行筛选时不能用数字索引进行筛选,因为当前a的行索引是一系列字符串

因为type和region的文本数据有点复杂,所以利用replace函数替换成数字来代表不同的品种和产地。 ~~其实这个替换并没有什么用,只是博主单纯地看不习惯文本数据而已。~~

因为数据中的特征值Total Bags=Small Bags+Large Bags,XLarge Bags=0,且region,type皆与4位plu码有属性重合的情况,所以为了避免出现过拟合,我这里只选取AveragePrice,Total Volume,4046,4225,4770,Small Bags,Large Bags进行预测建模。

4.建模

X_train,X_test,y_train,y_test=train_test_split(avocado_2017[["Total Volume","4225","4046","4770","Small Bags","Large Bags"]],avocado_2017["AveragePrice"],random_state=24)

#注意特征值标签要放在前面,预测值标签要放在后面

#考虑到接下来可能需要进行其他的操作,所以定了一个随机种子,保证接下来的train和test是同一组数

划分列索引为特征值和目标分类值,并将数据划分成训练集和测试集。

knn=KNeighborsRegressor(n_neighbors=1)

knn.fit(X_train,y_train)

prediction=knn.predict(X_test)

r2_score(y_test,prediction)

引入knn算法,并将算法中的邻居值设为1,进行建模后,对测试集进行精度评分,得到的结果如下:

可以看到,该模型的精度为50%左右。

5.简单的调参

之前设立的邻居参数为1,接下来依次测试不同的参数,看看最优的邻居参数是多少。

result={}

for i in range(100):#一般n_neighbors的选取低于样本总数的平方根

knn=KNeighborsRegressor(n_neighbors=(i+1))

knn.fit(X_train,y_train)

prediction=knn.predict(X_test)

score=r2_score(y_test,prediction)

result[i+1]=score*100

for i in result.keys():

if result[i]==max(result.values()):

print("最佳邻近数:"+str(i))

print("模型评分:"+str(max(result.values())))

结果如下:

可以看出在邻近数依次选择1~100的过程中,最佳邻近参数为4;模型的最佳精度评分是68分。(可以看到分数很低,博主认为有可能是算法本身的原因。毕竟是一个简单的算法,而不像森林或者树回归算法一样,可以调整权重等其它参数。)

6.总结

1.随着邻近参数的变化,模型精度也会跟随变化,并呈现一定的规律的规律:

对于同一个数据集,随着邻近参数的逐渐增加,模型精度往往会到达一个临界点,之后便会逐渐降低。其他的knn回归模型也会呈现这种情况,有兴趣的朋友可以自行检验一下。

2.回归类算法是预测连续值的算法,如果打算通过对预测标签进行分箱(pd.cut),来对预测标签进行变化范围的预测是行不通的。ps:博主已经尝试过,会报错误。

3.对于不同类型的数据要选择不同类型的算法,每个算法都有各自的优缺点,并没有可以解决所有问题的算法,所以在以后的建模中不要钻牛角尖,要注意选择。

有很多地方做的不是很好,欢迎网友来提出建议,也希望可以遇到些朋友来一起交流讨论。

python 余数a=k*b+r_python k相邻近算法之回归实操相关推荐

  1. k邻近算法-回归实操

    python k相邻近算法之回归实操 基本概念 先简单介绍一下机器学习里面的两个概念 1.分类与回归 分类模型和回归模型本质一样,分类模型是将回归模型的输出离散化. 一般来说,回归问题通常是用来预测一 ...

  2. 在Ubuntu 16.04.5 LTS上利用python中的PIL模块压缩一百多兆的单张图片实操

    在前面的博文中,我将300多张电影海报拼接为了一张103MB的巨幅图片,我想拿它做电脑桌面(1080P),但是这么多的图片,存储和加载是个麻烦事儿,需要将它压缩到几MB大小. 在Ubuntu 16.0 ...

  3. python影像组学_【影像组学预测模型-Radiomics】实操教学

    影像组学(Radiomics)是一个新兴的概念,2012 年由荷兰学者 Philippe Lambin 首次提出,其定义是借助计算机软件,从医学影像图像中挖掘海量的定量影像特征,使用统计学和/或机器学 ...

  4. python递归算法 电影院票价问题_算法课堂实验报告(二)——python递归和分治(第k小的数,大数乘法问题)...

    python实现递归和分治 一.开发环境 开发工具:jupyter notebook 并使用vscode,cmd命令行工具协助编程测试算法,并使用codeblocks辅助编写C++程序 编程语言:py ...

  5. k近邻回归算法python_K近邻算法用作回归的使用介绍(使用Python代码)

    介绍 在我遇到的所有机器学习算法中,KNN是最容易上手的.尽管它很简单,但事实上它其实在某些任务中非常有效(正如你将在本文中看到的那样). 甚至它可以做的更好?它可以用于分类和回归问题!然而,它其实更 ...

  6. 机器学习算法与Python实践之(二)k近邻(KNN)

      机器学习算法与Python实践之(二)k近邻(KNN) (基于稀疏矩阵的k近邻(KNN)实现) 一.概述 这里我们先来看看当我们的数据是稀疏时,如何用稀疏矩阵的特性为KNN算法加速.KNN算法在之 ...

  7. python机器学习库sklearn——K最近邻、K最近邻分类、K最近邻回归

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 KNN即K最近邻,相关的知识内容可以参考 http://blog.csdn.net/luanpeng825485697/article ...

  8. python 获取股市数据 baostock + 画K线图 mpl_finance

    python 获取股市数据 baostock + 画K线图 mpl_finance 获取股票数据 安装baostock库 baostock库的特性 获取A股K线数据 核心代码如下 完整代码如下 画K线 ...

  9. python random扩展随机数函数getrandbits(k)的使用

    今天又是学习python快乐的一天,刚刚学到了扩展随机数函数getrandbits(k),生成一个k比特长的随机整数,但完全不懂是什么意思,那就来试验吧: 首先来试试random.getrandbit ...

最新文章

  1. 计算机科学在航空航天仿真模拟,2016年南京航空航天大学计算机科学与技术学院541计算机综合基础之数据结构复试笔试仿真模拟题...
  2. 使用Virtual PC做病毒的试验
  3. 监视Rails进程内存泄漏的技巧
  4. webgl 基础渲染demo_WebGL + ThreeJS 实现实时水下焦散 Part 1
  5. 设python中有模块m、如果希望同时导入m中的所有成员_python-模块
  6. Unity ScriptObject
  7. 【Linux】shell调用Java程序main方法通过crontab定时执行
  8. jsp mysql事务锁,JSP操作数据库的事务回滚
  9. python读取txt矩阵数据(转换为excel格式利用pandas读取)
  10. android studio打包流程
  11. 软件设计师-6.结构化开发方法
  12. 实习周记----第三周
  13. webview的一些使用小窍门和需注意的地方
  14. 掌握这节JMeter性能测试:并发测试、压力测试,年薪30万不是梦
  15. 深度专访丨云和恩墨盖国强,识别它、抓住它,在国产数据库沸腾以前
  16. 杭州河坊街特色手机饰品——招财猫!
  17. CMap如何使用,如何实例化?
  18. [4G5G专题-58]:L2 PDCP子层-分组数据汇聚控制协议架构、PDCP包格式、鲁棒性头压缩RoHC
  19. 如何取消windows XP登录框,让其自动登录
  20. 计算机软件技术实习02

热门文章

  1. 树莓派 E: 无法定位软件包 luvcview
  2. 链表(数据结构)- LRC歌词解析播放示例
  3. Attempt to set a non-property-list object
  4. 从参数数量视角理解深度学习神经网络算法 DNN, CNN, RNN, LSTM 以python为工具
  5. MCUXpresso开发NXP RT1060(2)——IIC接口触摸屏芯片GT911
  6. 什么是证充分性,证必要性?
  7. Python 的nonlocal使用
  8. Java创建Excel文件
  9. mysql8.0.22查看和设置数据库隔离级别
  10. python接口测试框架选择之pytest+yaml+Allure