机器学习训练营——机器学习爱好者的自由交流空间(入群联系qq:2279055353)

这个例子说明在判别分析里使用缩水(shrinkage)的方法,可以提高分类的准确率。所谓“缩水”,是指减少预测的特征。我们使用的数据集是模拟数据,你也可以在真实数据集上验证缩水判别分析的分类效果。

实例详解

首先,导入必需的库。

from __future__ import divisionimport numpy as np
import matplotlib.pyplot as pltfrom sklearn.datasets import make_blobs
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

准备工作

n_train = 20  # samples for training
n_test = 200  # samples for testing
n_averages = 50  # how often to repeat classification
n_features_max = 75  # maximum number of features
step = 4  # step size for the calculation

函数generate_data()

函数generate_data()用来生成模拟数据集。它有两个参数n_samples, n_features, 分别指定样本数和特征数。该函数返回一个形如(n_samples, n_features)的数组和一个目标类标签数组。

def generate_data(n_samples, n_features):"""Generate random blob-ish data with noisy features.This returns an array of input data with shape `(n_samples, n_features)`and an array of `n_samples` target labels.Only one feature contains discriminative information, the other featurescontain only noise."""X, y = make_blobs(n_samples=n_samples, n_features=1, centers=[[-2], [2]])# add non-discriminative featuresif n_features > 1:X = np.hstack([X, np.random.randn(n_samples, n_features - 1)])return X, y

普通判别分析 v.s. 缩水判别分析

scikit-learn的线性判别分析函数LinearDiscriminantAnalysis使用一个线性边界的分类器,它使用贝叶斯规则的类条件密度拟合数据。模型假设所有的类有相同的协方差阵,对每一个类拟合一个高斯密度。LinearDiscriminantAnalysis的主要参数solver是一个字符串,指定使用的解形式。在这里,它取lsqr, 表示最小二乘解,可以与缩水法结合。参数shrinkage默认取值None, 表示没有缩水。在这里,它取auto, 表示使用Ledoit-Wolf(估计缩水的协方差阵)自动缩水。

acc_clf1, acc_clf2 = [], []
n_features_range = range(1, n_features_max + 1, step)
for n_features in n_features_range:score_clf1, score_clf2 = 0, 0for _ in range(n_averages):X, y = generate_data(n_train, n_features)clf1 = LinearDiscriminantAnalysis(solver='lsqr', shrinkage='auto').fit(X, y)clf2 = LinearDiscriminantAnalysis(solver='lsqr', shrinkage=None).fit(X, y)X, y = generate_data(n_test, n_features)score_clf1 += clf1.score(X, y)score_clf2 += clf2.score(X, y)acc_clf1.append(score_clf1 / n_averages)acc_clf2.append(score_clf2 / n_averages)features_samples_ratio = np.array(n_features_range) / n_train

可视化分类效果

plt.plot(features_samples_ratio, acc_clf1, linewidth=2,label="Linear Discriminant Analysis with shrinkage", color='navy')
plt.plot(features_samples_ratio, acc_clf2, linewidth=2,label="Linear Discriminant Analysis", color='gold')plt.xlabel('n_features / n_samples')
plt.ylabel('Classification accuracy')plt.legend(loc=1, prop={'size': 12})
plt.suptitle('Linear Discriminant Analysis vs. \
shrinkage Linear Discriminant Analysis (1 discriminative feature)')
plt.show()

精彩内容,请关注微信公众号:统计学习与大数据

【Python实例第14讲】普通判别分析与缩水判别分析相关推荐

  1. shell实例第14讲:字符串截取的8种方法

    方法1:#号截取 #!/bin/bash #作者:魏波 #时间:2017.02.04var=http://www.weibo.com/weibo.html echo ${var#*//} #号截取:从 ...

  2. Python零基础速成班-第14讲-Python处理Excel和Word,使用openpyxl和docx包详解,图表入门

    Python零基础速成班-第14讲-Python处理Excel和Word,使用openpyxl和docx包详解,图表入门 学习目标 Python处理Excel(使用openpyxl包).图表入门\ P ...

  3. python实例豆瓣代码_Python实例:通过selenium模拟登陆豆瓣

    前几天写的<Python实例:分析豆瓣影片评论Ver 1.0版本>文章中,关于爬取数据过频繁导致IP被封禁的事情让我对豆瓣数据的爬取中断了.忽然想到之前有写过关于关于使用selenium库 ...

  4. python快速入门精讲_Python快速入门精讲

    基础入门篇 第0章从零开始3 0.1克服编程恐惧3 0.2如何写出好程序4 0.3为什么选择Python5 0.4Python的发展和应用6 0.5一些建议8 0.6多平台搭建Python开发环境10 ...

  5. 【数据分析师-python基础】python基础语法精讲

    python基础语法精讲 1 从数字开始 1.1 理解整数.浮点数.复数几种类型对象 1.2 掌握运算及其相关的常用函数 2 变量.表达式和语句 2.1 变量作用及定义的方法 2.2 变量命名原则和习 ...

  6. python写文件读文件-Python 实例:读写文件

    原标题:Python 实例:读写文件 读写文件是最常见的IO操作.内置了读写文件的函数,用法和的读写文件非常类似.在磁盘上读写文件的功能都是由提供的,现代不允许普通的程序直接操作磁盘,所以,读写文件就 ...

  7. python教程实例-Python实例教程

    转自:http://codingdict.com/article/9026 Python 100例-01 题目: 输有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数? Python 1 ...

  8. 使用docker安装部署Spark集群来训练CNN(含Python实例)

    使用docker安装部署Spark集群来训练CNN(含Python实例) 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如需 ...

  9. python中bool函数的用法_python3实战python函数每日一讲 - bool([x])

    bool([x]) 英文说明:Convert a value to a Boolean, using the standard truth testing procedure. If x is fal ...

  10. 全网最全面的python的讲解,讲的无可挑剔《记得收藏》

    全网最全面的python的讲解,讲的无可挑剔<记得收藏> 目录 1.简介 Pyhon中如何文件拷贝 Python数学库及其应用 Python异常处理机制 ETC turtle库的常用指令 ...

最新文章

  1. wordpress主题
  2. 积性函数、狄利克雷卷积、莫比乌斯反演
  3. linux ll一页一页,Linux使用技巧33则
  4. SNOI 2019 退役记
  5. 在Python这条路上踩过的坑(1)
  6. php ci框架中载入css和js文件失败的原因及解决方法
  7. c语言中程序偏离,C语言程序员在编码时容易出错的几个点
  8. scipy.ndimage.zoom上采样与下采样
  9. matlab浮点数求绝对值_MATLAB仿真阵列天线切比雪夫综合法(附代码)
  10. Android支付宝SDK开发笔记
  11. Use Data Caching Techniques to Boost Performance and Ensure Synchronization(转)
  12. Android Toolbar
  13. 如何按页进行PDF文档拆分
  14. Python中用于身份证验证的库函数
  15. 华为的芯片战略:别忘记,代号—SD502!
  16. 嵌入式面试(笔试)笔记2
  17. python操作微信电脑版_PC端微信数据库解密Python版
  18. 一步步教你设置Word2003首字下沉
  19. vue 外部字体图标使用,无须绝对路径引入办法
  20. TOGAF之架构标准规范(一)

热门文章

  1. 未将对象引用设置到对象实例(转)
  2. 论Web控件开发 - 完美上传下载控件“新”(一)
  3. Cocos2d-xUI组件详解
  4. 游戏开发筑基之特殊输入函数的妙用(C语言)
  5. The Top 8 Security and Risk Trends We’re Watching
  6. 如何使用Secure CRT连接到华三模拟器上和华为模拟器上(更新模拟器版本,SecureCRT版本)
  7. 其六,函数之一Function
  8. 三羊献瑞——第六届蓝桥杯C语言B组(省赛)第三题
  9. xampp修改mysql的默认空密码
  10. android插件化-apkplug中OSGI服务基本原理-08