准备

相关的库

相关的库包括:

  • 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) #分别对训练集、测试集进行归一化

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

以KNN为例用sklearn进行数据分析和预测的更多相关文章

  1. KNN算法基本原理与sklearn实现

    ''' KNN 近邻算法,有监督学习算法 用于分类和回归 思路: 1.在样本空间中查找 k 个最相似或者距离最近的样本 2.根据这 k 个最相似的样本对未知样本进行分类 步骤: 1.对数据进行预处理 ...

  2. 使用sklearn进行数据挖掘-房价预测(4)—数据预处理

    在使用机器算法之前,我们先把数据做下预处理,先把特征和标签拆分出来 housing = strat_train_set.drop("median_house_value",axis ...

  3. 使用sklearn进行数据挖掘-房价预测(6)—模型调优

    通过上一节的探索,我们会得到几个相对比较满意的模型,本节我们就对模型进行调优 网格搜索 列举出参数组合,直到找到比较满意的参数组合,这是一种调优方法,当然如果手动选择并一一进行实验这是一个十分繁琐的工 ...

  4. 使用sklearn进行数据挖掘-房价预测(1)

    使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...

  5. 使用sklearn进行数据挖掘-房价预测(2)—划分测试集

    使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...

  6. 使用sklearn进行数据挖掘-房价预测(3)—绘制数据的分布

    使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...

  7. 使用sklearn进行数据挖掘-房价预测(5)—训练模型

    使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...

  8. C++并发与多线程学习笔记--单例设计模式、共享数据分析

    设计模式 共享数据分析 call_once 设计模式 开发程序中的一些特殊写法,这些写法和常规写法不一样,但是程序灵活,维护起来方便,别人接管起来,阅读代码的时候都会很痛苦.用设计模式理念写出来的代码 ...

  9. python数据分析Titanic_Survived预测

    import pandas as pd import matplotlib.pyplot as plt # matplotlib画图注释中文需要设置from matplotlib.font_manag ...

随机推荐

  1. MSP430系列单片机笔记00

    嵌入式系统 嵌入式系统(Embedded system),是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,根据英国电气工程师协会( U.K. Institution of Elect ...

  2. Java的包装类

    一.概述 因为基本数据类型的变量身上没有任何的方法和属性,所以针对基本数据类型提供了对应的类形式--包装类. 利用这个类产生对象,调用对象身上的方法来操作这个数据. 二.分类 包装类分为以下几种: 基 ...

  3. mybaits入门学习

    学习了简单的mybatis的配置 Bean层: 这个都会很简单 一个完整的Bean 需要getter和setter方法还需要一个空的构造方法和一个满的构造方法. Dao层: 创建一个接口就ok了 pa ...

  4. tx2的一些系统命令

    查看TX2 ubuntu系统版本命令:https://blog.csdn.net/zhengxiangwen/article/details/60324802 sudo uname --m

  5. 进度5_家庭记账本App_数据库的添加和查看

    今天继续在昨天的基础上完成了家庭记账单的在数据库中的添加和查看功能 在之前的基础上舍弃了Fragment,重新在百度上找到了学习资料,并且自我完成了实践 首先在之前的基础上创建CostListAdap ...

  6. SpringBoot 系列教程之事务不生效的几种 case

    SpringBoot 系列教程之事务不生效的几种 case 前面几篇博文介绍了声明式事务@Transactional的使用姿势,只知道正确的使用姿势可能还不够,还得知道什么场景下不生效,避免采坑.本文 ...

  7. jar包-循环遍历-开机启动服务-微服务-多项目拷贝-pid杀死进程-mysql备份脚本-防火墙检测脚本

    vi /root/serverkaiji.sh #!/bin/bash ls /tlvnksc/ | egrep -v "^c|^f" > /root/service.lis ...

  8. python人脸识别项目face-recognition

    该项目基于Github上面的开源项目人脸识别face-recognition,主要是对图像和视频中的人脸进行识别,在开源项目给出的例子基础上对视频人脸识别的KNN算法进行了实现. 0x1 工程项目结构 ...

  9. 常用模块-正则re

    常用模块之正则模块 """ 正则表达式与re模块的关系 1.正则表达式是一门独立的技术,任何语言均可使用 2.python中要想使用正则表达式需要通过re模块 " ...

  10. VBE2019的下载、安装和使用(最新版2020.2.22)

    VBE2019可用于XP系统.Windows 7和Windows 10的32位.64位Office对应的VBA环境 安装包下载地址:VBE2019-Setup.zip 下载后解压缩,直接双击安装(请勿 ...