【Python实例第14讲】普通判别分析与缩水判别分析
机器学习训练营——机器学习爱好者的自由交流空间(入群联系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讲】普通判别分析与缩水判别分析相关推荐
- shell实例第14讲:字符串截取的8种方法
方法1:#号截取 #!/bin/bash #作者:魏波 #时间:2017.02.04var=http://www.weibo.com/weibo.html echo ${var#*//} #号截取:从 ...
- Python零基础速成班-第14讲-Python处理Excel和Word,使用openpyxl和docx包详解,图表入门
Python零基础速成班-第14讲-Python处理Excel和Word,使用openpyxl和docx包详解,图表入门 学习目标 Python处理Excel(使用openpyxl包).图表入门\ P ...
- python实例豆瓣代码_Python实例:通过selenium模拟登陆豆瓣
前几天写的<Python实例:分析豆瓣影片评论Ver 1.0版本>文章中,关于爬取数据过频繁导致IP被封禁的事情让我对豆瓣数据的爬取中断了.忽然想到之前有写过关于关于使用selenium库 ...
- python快速入门精讲_Python快速入门精讲
基础入门篇 第0章从零开始3 0.1克服编程恐惧3 0.2如何写出好程序4 0.3为什么选择Python5 0.4Python的发展和应用6 0.5一些建议8 0.6多平台搭建Python开发环境10 ...
- 【数据分析师-python基础】python基础语法精讲
python基础语法精讲 1 从数字开始 1.1 理解整数.浮点数.复数几种类型对象 1.2 掌握运算及其相关的常用函数 2 变量.表达式和语句 2.1 变量作用及定义的方法 2.2 变量命名原则和习 ...
- python写文件读文件-Python 实例:读写文件
原标题:Python 实例:读写文件 读写文件是最常见的IO操作.内置了读写文件的函数,用法和的读写文件非常类似.在磁盘上读写文件的功能都是由提供的,现代不允许普通的程序直接操作磁盘,所以,读写文件就 ...
- python教程实例-Python实例教程
转自:http://codingdict.com/article/9026 Python 100例-01 题目: 输有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数? Python 1 ...
- 使用docker安装部署Spark集群来训练CNN(含Python实例)
使用docker安装部署Spark集群来训练CNN(含Python实例) 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如需 ...
- python中bool函数的用法_python3实战python函数每日一讲 - bool([x])
bool([x]) 英文说明:Convert a value to a Boolean, using the standard truth testing procedure. If x is fal ...
- 全网最全面的python的讲解,讲的无可挑剔《记得收藏》
全网最全面的python的讲解,讲的无可挑剔<记得收藏> 目录 1.简介 Pyhon中如何文件拷贝 Python数学库及其应用 Python异常处理机制 ETC turtle库的常用指令 ...
最新文章
- wordpress主题
- 积性函数、狄利克雷卷积、莫比乌斯反演
- linux ll一页一页,Linux使用技巧33则
- SNOI 2019 退役记
- 在Python这条路上踩过的坑(1)
- php ci框架中载入css和js文件失败的原因及解决方法
- c语言中程序偏离,C语言程序员在编码时容易出错的几个点
- scipy.ndimage.zoom上采样与下采样
- matlab浮点数求绝对值_MATLAB仿真阵列天线切比雪夫综合法(附代码)
- Android支付宝SDK开发笔记
- Use Data Caching Techniques to Boost Performance and Ensure Synchronization(转)
- Android Toolbar
- 如何按页进行PDF文档拆分
- Python中用于身份证验证的库函数
- 华为的芯片战略:别忘记,代号—SD502!
- 嵌入式面试(笔试)笔记2
- python操作微信电脑版_PC端微信数据库解密Python版
- 一步步教你设置Word2003首字下沉
- vue 外部字体图标使用,无须绝对路径引入办法
- TOGAF之架构标准规范(一)
热门文章
- 未将对象引用设置到对象实例(转)
- 论Web控件开发 - 完美上传下载控件“新”(一)
- Cocos2d-xUI组件详解
- 游戏开发筑基之特殊输入函数的妙用(C语言)
- The Top 8 Security and Risk Trends We’re Watching
- 如何使用Secure CRT连接到华三模拟器上和华为模拟器上(更新模拟器版本,SecureCRT版本)
- 其六,函数之一Function
- 三羊献瑞——第六届蓝桥杯C语言B组(省赛)第三题
- xampp修改mysql的默认空密码
- android插件化-apkplug中OSGI服务基本原理-08