python 余数a=k*b+r_python k相邻近算法之回归实操
基本概念
先简单介绍一下机器学习里面的两个概念
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相邻近算法之回归实操相关推荐
- k邻近算法-回归实操
python k相邻近算法之回归实操 基本概念 先简单介绍一下机器学习里面的两个概念 1.分类与回归 分类模型和回归模型本质一样,分类模型是将回归模型的输出离散化. 一般来说,回归问题通常是用来预测一 ...
- 在Ubuntu 16.04.5 LTS上利用python中的PIL模块压缩一百多兆的单张图片实操
在前面的博文中,我将300多张电影海报拼接为了一张103MB的巨幅图片,我想拿它做电脑桌面(1080P),但是这么多的图片,存储和加载是个麻烦事儿,需要将它压缩到几MB大小. 在Ubuntu 16.0 ...
- python影像组学_【影像组学预测模型-Radiomics】实操教学
影像组学(Radiomics)是一个新兴的概念,2012 年由荷兰学者 Philippe Lambin 首次提出,其定义是借助计算机软件,从医学影像图像中挖掘海量的定量影像特征,使用统计学和/或机器学 ...
- python递归算法 电影院票价问题_算法课堂实验报告(二)——python递归和分治(第k小的数,大数乘法问题)...
python实现递归和分治 一.开发环境 开发工具:jupyter notebook 并使用vscode,cmd命令行工具协助编程测试算法,并使用codeblocks辅助编写C++程序 编程语言:py ...
- k近邻回归算法python_K近邻算法用作回归的使用介绍(使用Python代码)
介绍 在我遇到的所有机器学习算法中,KNN是最容易上手的.尽管它很简单,但事实上它其实在某些任务中非常有效(正如你将在本文中看到的那样). 甚至它可以做的更好?它可以用于分类和回归问题!然而,它其实更 ...
- 机器学习算法与Python实践之(二)k近邻(KNN)
机器学习算法与Python实践之(二)k近邻(KNN) (基于稀疏矩阵的k近邻(KNN)实现) 一.概述 这里我们先来看看当我们的数据是稀疏时,如何用稀疏矩阵的特性为KNN算法加速.KNN算法在之 ...
- python机器学习库sklearn——K最近邻、K最近邻分类、K最近邻回归
全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 KNN即K最近邻,相关的知识内容可以参考 http://blog.csdn.net/luanpeng825485697/article ...
- python 获取股市数据 baostock + 画K线图 mpl_finance
python 获取股市数据 baostock + 画K线图 mpl_finance 获取股票数据 安装baostock库 baostock库的特性 获取A股K线数据 核心代码如下 完整代码如下 画K线 ...
- python random扩展随机数函数getrandbits(k)的使用
今天又是学习python快乐的一天,刚刚学到了扩展随机数函数getrandbits(k),生成一个k比特长的随机整数,但完全不懂是什么意思,那就来试验吧: 首先来试试random.getrandbit ...
最新文章
- 计算机科学在航空航天仿真模拟,2016年南京航空航天大学计算机科学与技术学院541计算机综合基础之数据结构复试笔试仿真模拟题...
- 使用Virtual PC做病毒的试验
- 监视Rails进程内存泄漏的技巧
- webgl 基础渲染demo_WebGL + ThreeJS 实现实时水下焦散 Part 1
- 设python中有模块m、如果希望同时导入m中的所有成员_python-模块
- Unity ScriptObject
- 【Linux】shell调用Java程序main方法通过crontab定时执行
- jsp mysql事务锁,JSP操作数据库的事务回滚
- python读取txt矩阵数据(转换为excel格式利用pandas读取)
- android studio打包流程
- 软件设计师-6.结构化开发方法
- 实习周记----第三周
- webview的一些使用小窍门和需注意的地方
- 掌握这节JMeter性能测试:并发测试、压力测试,年薪30万不是梦
- 深度专访丨云和恩墨盖国强,识别它、抓住它,在国产数据库沸腾以前
- 杭州河坊街特色手机饰品——招财猫!
- CMap如何使用,如何实例化?
- [4G5G专题-58]:L2 PDCP子层-分组数据汇聚控制协议架构、PDCP包格式、鲁棒性头压缩RoHC
- 如何取消windows XP登录框,让其自动登录
- 计算机软件技术实习02
热门文章
- 树莓派 E: 无法定位软件包 luvcview
- 链表(数据结构)- LRC歌词解析播放示例
- Attempt to set a non-property-list object
- 从参数数量视角理解深度学习神经网络算法 DNN, CNN, RNN, LSTM 以python为工具
- MCUXpresso开发NXP RT1060(2)——IIC接口触摸屏芯片GT911
- 什么是证充分性,证必要性?
- Python 的nonlocal使用
- Java创建Excel文件
- mysql8.0.22查看和设置数据库隔离级别
- python接口测试框架选择之pytest+yaml+Allure