准备

相关的库

相关的库包括:

  • numpy
  • pandas
  • sklearn

带入代码如下:

import pandas as pd
import numpy as np
from sklearn.neighbors import KNeighborsClassfier as KNN

数据准备

数据是sklearn的乳腺癌数据。

from skleanr.datasets import load_breast_cancer
data=load_breast_caner()

data主要分为两部分:datatarget,把这两部分,设置变量导入DataFrame中可查看基本形状。

X = data.data
y = data.target

sklearn的数据其形式比较固定,data的主要属性有:

  • data。数据,即变量的值,多行多列
  • target。目标,即因变量的值,一般是一行
  • DESCR。描述,可打印出,描述变量、目标
  • features_names 。X的列名
  • target_names。Y的列名
  • filename。数据文件所在位置(一般在\lib\site-packages\sklearn\datasets\data\目录下)

分数据集和测试集:

from sklearn.model_selection import train_test_split
Xtrain,Xtest,Ytrain,Ytest=train_test_split(X, y, test_size=0.3)

注意:

  • 0.3是指30%数据作为测试。每次运行不同,可通过random_state控制
  • 返回的结果固定,不可错

建立模型

clf = KNN(n_neighbors = 5)
clf=clf.fit(Xtrain,Ytrain)

clf就是训练好的模型,可调用接口查看进行预测和评分。常用是predictscorekneighbors。三者分别用来预测、评分、求最近邻。

在选择训练集和测试集的时候,可能会存在以下问题。

  1. 选择测试集和训练集每次都是不同的,因此每次模型的效果都不同。
  2. 选择测试集和训练集有时会极大影响模型。——特别是当数据是有顺序的时候。

因此需要交叉验证,找到最好的参数,再次训练模型。

K折交叉验证

K折交叉验证的方法:

cvresult=CVS(clf,X,y,cv=5)

CVS的第一个参数是训练过的模型,参数cv是折数。

cvresult.mean() # 取得均值
cvresult.var() #取得方差

可利用方差,绘制出学习曲线:

score =[]
var_=[]
krange=range(1,21)
for i in krange:clf=KNN(n_neighbors=i)cvresult=CVS(clf,X,y,cv=5)score.append(cvresult.mean())var_.append(cvresult.var())
plt.plot(krange,score,color='k')
plt.plot(krange,np.array(score)+np.array(var_)*2,c='red',linestyle='--')
plt.plot(krange,np.array(score)-np.array(var_)*2,c='red',linestyle='--')
bestindex=score.index(max(score))
print(bestindex+1)
print(score[bestindex])

常用交叉验证

  • K折。特别在回归模型,若数据有顺序,结果会很糟糕
  • stratifiedKfold。常用
  • shuffleSplit。常用
  • GroupKFold。

但是如果把数据分为:训练数据、测试数据。训练数据又分出来一部分验证数据,那么真正用于训练的数据就更小了。

归一化

KNN是距离类的模型,因此需要归一化。也就是把数据减去最差值,处以极差:

\[ x^*=\frac{x-min(x)}{max(x)-min(x)} \]

归一化要分训练集和测试集之后。(因为归一化时候用到的极值,很可能就是测试集的数据,这样事先就把数据透露给模型了)

Xtrain,Xtest,Ytrain,Ytest=train_test_split(X_,y,test_size=0.3,random_state=420)
MMS=nms().fit(Xtrain) #MMS中,有Xtrain的min,和极差
Xtest_=MMS.transform(Xtest)
Xtrain_=MMS.transform(Xtrain) #分别对训练集、测试集进行归一化

这样再运行学习曲线的代码,得到的结果就要好一些:

转载于:https://www.cnblogs.com/heenhui2016/p/10986745.html

以KNN为例用sklearn进行数据分析和预测相关推荐

  1. KNN算法——kd-tree、KNN莺尾花分类sklearn实现实例

    KNN算法--kd-tree.KNN莺尾花分类sklearn实现实例 KNN算法--kd-tree.KNN莺尾花分类sklearn实现实例 1.kd-tree 2.kd-tree的构建 3.kd-tr ...

  2. 大数据-11-案例演习-淘宝双11数据分析与预测

    主要摘自 http://dblab.xmu.edu.cn/post/8116/ 案例简介 Spark课程实验案例:淘宝双11数据分析与预测课程案例,由厦门大学数据库实验室团队开发,旨在满足全国高校大数 ...

  3. 利用R语言对泰坦尼克号沉没事件幸存者的数据分析与预测

    题外话:在文章正式开始之前,我还是想先写一点题外话,一是为了引出写作这篇博客的目的,二则是希望能够记录下现在的所思所想为以后留个纪念.首先介绍一下自己,毕业3年多的小硕一枚,大学期间学的专业是高分子材 ...

  4. 【Python】时间序列数据分析与预测之Python工具汇总

    本文中总结了十多种时间序列数据分析和预测工具和python库,在我们处理时间序列项目时,可以翻开本文,根据需要选择合适的工具,将会事半功倍! 在处理时间序列项目时,数据科学家或 ML 工程师通常会使用 ...

  5. 电商销售数据分析与预测(日期数据统计、按天统计、按月统计)

    本文来自<Python数据分析从入门到精通>--明日科技编著 随着电商行业的激烈竞争,电商平台推出了各种数字营销方案,付费广告也是花样繁多.那么电商投入广告后,究竟能给企业增加多少收益,对 ...

  6. python空气质量分析与预测_干货!如何用 Python+KNN 算法实现城市空气质量分析与预测?...

    原标题:干货!如何用 Python+KNN 算法实现城市空气质量分析与预测? 作者 | 李秋键 责编 | 伍杏玲 封图 | CSDN 付费下载自东方 IC 出品 | CSDN(ID:CSDNnews) ...

  7. 时间序列数据分析与预测之Python工具汇总

    ‍ ‍ 大家好,我是辰哥‍ ‍ 本文中硬核总结了十多种时间序列数据分析和预测工具和python库,在我们处理时间序列项目时,可以翻开本文,根据需要选择合适的工具,将会事半功倍! 在处理时间序列项目时, ...

  8. 铁路轨道不平顺数据分析与预测

    铁路轨道不平顺数据分析与预测 1.引言 铁路轨道作为铁行车的基础设施,是铁路线路的重要组成部分.随着经济和交通运输业的发展,我国的铁路运输正朝着高速和重载方向迅速发展,与此同时,轨道结构承受来自列车荷 ...

  9. 电商数据分析--薪资预测(线性回归)

    电商数据分析–薪资预测(线性回归) 数据分析流程: 明确目的 获取数据 数据探索和预处理 分析数据 得出结论 验证结论 结果展现 线性回归:线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间 ...

最新文章

  1. 从理论到实践 全面理解HTTP/2
  2. GlusterFS下如何修复裂脑文件?(续一)
  3. 二分图专题系列各大知识点总结(匈牙利,染色法,最大独立集,最小点覆盖,最小路径覆盖)
  4. jvm中有哪些内存区域会发生内存溢出
  5. tensorflow 制定 CPU 或GPU
  6. PHP网站开启gzip压缩,php中开启gzip压缩的2种方法代码
  7. 【C++深度剖析教程22】继承的概念和意义
  8. 相邻位数字差值的绝对值不能超过_热点争议中技术问题,伺服控制有几个零点?对应真绝对值多圈编码器意义...
  9. 并行算法设计与性能优化总结
  10. 第二次结对编程作业——毕业导师智能匹配
  11. 2021-08-10 idea 事务的操作
  12. 嵊州D1T1 总统先生,一路走好!
  13. 小松鼠短视频完美开源源码
  14. 【学习笔记】Servlet容器(Web容器)简介
  15. c语言建立文件的时候会飞动,C语言:简单而不易懂的声明(二)
  16. 三星android 安卓版本怎么升级包,三星A70官方安卓9固件系统线刷升级更新包:BRI-A7050ZHU3ASJ1...
  17. 各种透明玻璃厚度测量双边对射厚度测量精密测量厂家
  18. Mac Pro 开不了机
  19. 2021 AAAI Fellow名单重磅出炉!华人学者遗憾连续两年无缘入选
  20. 使用 ESP32 设计智能手表第 3 部分 - 磁力计和陀螺仪

热门文章

  1. shell脚本游戏之:剪刀石头布
  2. Eclipse配置注释模板的方法
  3. 《Javascript高级程序设计》读书笔记之bind函数详解
  4. java基础-类加载学习笔记
  5. 技巧:设置程序默认安装到D盘
  6. 生吃蔬菜健康轻松瘦身 - 健康程序员,至尚生活!
  7. 昆曲,古琴,苏州评弹
  8. 强弩之末,势不能穿鲁缟
  9. 2018.3,GC可控了
  10. Fescar TC-rollback流程