Scikit-learn方法使用总结
在机器学习和数据挖掘的应用中,scikit-learn是一个功能强大的python包。在数据量不是过大的情况下,可以解决大部分问题。近期在学习使用scikit-learn的过程中,我自己也在补充着机器学习和数据挖掘的知识。以下是我做一个总结的笔记。后续会结合竞赛实操。
1 scikit-learn基础介绍
1.1 估计器(Estimator)
常直接理解成分类器,主要包含两个函数:
- fit():训练算法,设置内部参数。接收训练集和类别两个参数。
- predict():预测测试集类别,参数为测试集。
大多数scikit-learn估计器接收和输出的数据格式均为numpy数组或类似格式。
1.2 转换器(Transformer)
转换器用于数据预处理和数据转换,主要是三个方法:
- fit():训练算法,设置内部参数。
- transform():数据转换。
- fit_transform():合并fit和transform两个方法。
1.3 流水线(Pipeline)
sklearn.pipeline包
功能:
- 跟踪记录各步骤的操作(以方便地重现实验结果)
- 对各步骤进行一个封装
- 确保代码的复杂程度不至于超出掌控范围
使用方法:
流水线的输入为一连串的数据挖掘步骤,其中最后一步必须是估计器,前几步是转换器。输入的数据集经过转换器的处理后,输出的结果作为下一步的输入。最后,用位于流水线最后一步的估计器对数据进行分类。
每一步都用元组( ‘名称’,步骤)来表示。现在来创建流水线。
scaling_pipeline = Pipeline([
('scale', MinMaxScaler()),
('predict', KNeighborsClassifier())
])
1.4 预处理
主要在sklearn.preprcessing包下。
规范化:
- MinMaxScaler :最大最小值规范化
- Normalizer :使每条数据各特征值的和为1
- StandardScaler :为使各特征的均值为0,方差为1
编码:
- LabelEncoder :把字符串类型的数据转化为整型
- OneHotEncoder :特征用一个二进制数字来表示
- Binarizer :为将数值型特征的二值化
- MultiLabelBinarizer:多标签二值化
1.5 特征
1.5.1 特征抽取
包:sklearn.feature_extraction
特征抽取是数据挖掘任务最为重要的一个环节,一般而言,它对最终结果的影响要高过数据挖掘算法本身。只有先把现实用特征表示出来,才能借助数据挖掘的力量找到问题的答案。特征选择的另一个优点在于:降低真实世界的复杂度,模型比现实更容易操纵。
一般最常使用的特征抽取技术都是高度针对具体领域的,对于特定的领域,如图像处理,在过去一段时间已经开发了各种特征抽取的技术,但这些技术在其他领域的应用却非常有限。
- DictVectorizer: 将dict类型的list数据,转换成numpy array
- FeatureHasher : 特征哈希,相当于一种降维技巧
- image:图像相关的特征抽取
- text: 文本相关的特征抽取
- text.CountVectorizer:将文本转换为每个词出现的个数的向量
- text.TfidfVectorizer:将文本转换为tfidf值的向量
- text.HashingVectorizer:文本的特征哈希
1.5.2 特征选择
包:sklearn.feature_selection
特征选择的原因如下:
(1)降低复杂度
(2)降低噪音
(3)增加模型可读性
- VarianceThreshold: 删除特征值的方差达不到最低标准的特征
- SelectKBest: 返回k个最佳特征
- SelectPercentile: 返回表现最佳的前r%个特征
单个特征和某一类别之间相关性的计算方法有很多。最常用的有卡方检验(χ2)。其他方法还有互信息和信息熵。
- chi2: 卡方检验(χ2)
1.6 降维
包:sklearn.decomposition
- 主成分分析算法(Principal Component Analysis, PCA)的目的是找到能用较少信息描述数据集的特征组合。它意在发现彼此之间没有相关性、能够描述数据集的特征,确切说这些特征的方差跟整体方差没有多大差距,这样的特征也被称为主成分。这也就意味着,借助这种方法,就能通过更少的特征捕获到数据集的大部分信息。
1.7 组合
包:**sklearn.ensemble **
组合技术即通过聚集多个分类器的预测来提高分类准确率。
常用的组合分类器方法:
(1)通过处理训练数据集。即通过某种抽样分布,对原始数据进行再抽样,得到多个训练集。常用的方法有装袋(bagging)和提升(boosting)。
(2)通过处理输入特征。即通过选择输入特征的子集形成每个训练集。适用于有大量冗余特征的数据集。随机森林(Random forest)就是一种处理输入特征的组合方法。
(3)通过处理类标号。适用于多分类的情况,将类标号随机划分成两个不相交的子集,再把问题变为二分类问题,重复构建多次模型,进行分类投票。
- BaggingClassifier: Bagging分类器组合
- BaggingRegressor: Bagging回归器组合
- AdaBoostClassifier: AdaBoost分类器组合
- AdaBoostRegressor: AdaBoost回归器组合
- GradientBoostingClassifier:GradientBoosting分类器组合
- GradientBoostingRegressor: GradientBoosting回归器组合
- ExtraTreeClassifier:ExtraTree分类器组合
- ExtraTreeRegressor: ExtraTree回归器组合
- RandomTreeClassifier:随机森林分类器组合
- RandomTreeRegressor: 随机森林回归器组合
1.8 模型评估(度量)
包:sklearn.metrics
sklearn.metrics包含评分方法、性能度量、成对度量和距离计算。
分类结果度量
参数大多是y_true和y_pred。
- accuracy_score:分类准确度
- condusion_matrix :分类混淆矩阵
- classification_report:分类报告
- precision_recall_fscore_support:计算精确度、召回率、f、支持率
- jaccard_similarity_score:计算jcaard相似度
- hamming_loss:计算汉明损失
- zero_one_loss:0-1损失
- hinge_loss:计算hinge损失
- log_loss:计算log损失
其中,F1是以每个类别为基础进行定义的,包括两个概念:准确率(precision)和召回率(recall)。准确率是指预测结果属于某一类的个体,实际属于该类的比例。召回率是被正确预测为某类的个体,与数据集中该类个体总数的比例。F1是准确率和召回率的调和平均数。
回归结果度量
- explained_varicance_score:可解释方差的回归评分函数
- mean_absolute_error:平均绝对误差
- mean_squared_error:平均平方误差
多标签的度量
- coverage_error:涵盖误差
- label_ranking_average_precision_score:计算基于排名的平均误差Label ranking average precision (LRAP)
聚类的度量
- adjusted_mutual_info_score:调整的互信息评分
- silhouette_score:所有样本的轮廓系数的平均值
- silhouette_sample:所有样本的轮廓系数
1.9 交叉验证
包:sklearn.cross_validation
- KFold:K-Fold交叉验证迭代器。接收元素个数、fold数、是否清洗
- LeaveOneOut:LeaveOneOut交叉验证迭代器
- LeavePOut:LeavePOut交叉验证迭代器
- LeaveOneLableOut:LeaveOneLableOut交叉验证迭代器
- LeavePLabelOut:LeavePLabelOut交叉验证迭代器
if name == ‘main’:
show_cross_val(“lpo”)
常用方法
- train_test_split:分离训练集和测试集(不是K-Fold)
- cross_val_score:交叉验证评分,可以指认cv为上面的类的实例
- cross_val_predict:交叉验证的预测。
1.10 网格搜索
包:sklearn.grid_search
网格搜索最佳参数
- GridSearchCV:搜索指定参数网格中的最佳参数
- ParameterGrid:参数网格
- ParameterSampler:用给定分布生成参数的生成器
- RandomizedSearchCV:超参的随机搜索
通过best_estimator_.get_params()方法,获取最佳参数。
1.11 多分类、多标签分类
包:sklearn.multiclass
- OneVsRestClassifier:1-rest多分类(多标签)策略
- OneVsOneClassifier:1-1多分类策略
- OutputCodeClassifier:1个类用一个二进制码表示
最后奉献sklearn处理数据流程图一张:
Scikit-learn方法使用总结的更多相关文章
- Scikit Learn: 在python中机器学习
转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...
- scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)
scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...
- (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探
一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...
- (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探
目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...
- Scikit Learn
Scikit Learn Scikit-Learn简称sklearn,基于 Python 语言的,简单高效的数据挖掘和数据分析工具,建立在 NumPy,SciPy 和 matplotlib 上.
- Query意图分析:记一次完整的机器学习过程(scikit learn library学习笔记)
所谓学习问题,是指观察由n个样本组成的集合,并根据这些数据来预测未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.假设现在有一个O2O领域的 ...
- Python第三方库(模块)"scikit learn"以及其他库的安装
scikit-learn是一个用于机器学习的 Python 模块. 其主页:http://scikit-learn.org/stable/. GitHub地址: https://github.com/ ...
- 机器学习-scikit learn学习笔记
scikit-learn官网:http://scikit-learn.org/stable/ 通常情况下,一个学习问题会包含一组学习样本数据,计算机通过对样本数据的学习,尝试对未知数据进行预测. 学习 ...
- Linear Regression with Scikit Learn
Before you read This is a demo or practice about how to use Simple-Linear-Regression in scikit-lear ...
- Scikit Learn安装教程
Windows下安装scikit-learn 准备工作 Python (>= 2.6 or >= 3.3), Numpy (>= 1.6.1) Scipy (>= 0.9), ...
随机推荐
- 4.9版本的linux内核中温度传感器adt7461的驱动源码在哪里
答:drivers/hwmon/lm90.c,这个文件中支持了好多芯片,内核配置项为CONFIG_SENSORS_LM90 Location: -> Device Drivers -> H ...
- CentOS 7 SSH远程证书登陆
SSH远程证书登陆是使用"公私钥"认证的方式来进行SSH登录. 1.创建公私钥 创建方式有很多种,比如说通用ssh连接工具创建,然后把公钥上传到Server主机对应的用户目录下: ...
- hadoop安装时报错 /usr/local/hadoop-2.6.0-stable/hadoop-2.6.0-src/hadoop-hdfs-project/hadoop-hdfs/target/findbugsXml.xml does not exist
安装时报错:Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (site) on project ...
- finally是否执行?finally何时执行?
一.finally是否执行: 1.只有与 finally 相对应的 try 语句块得到执行的情况下,finally 语句块才会执行当finally 相对应的 try 语句块之前,已经抛出错误,或者已经 ...
- 面试笔试总结(一)之 C++基础
C++ 1.智能指针 内存管理 垃圾回收 指针问题 资源管理(内存就是资源) 可以通过引用计数的机制...实现内存回收,不要让内存泄漏. 涉及到内存的泄露的问题: 当创建一个对象的时候(new)而在对 ...
- Spring事物原理完全解析
事务是什么?了解事务的原理吗?说下Spring的事务原理,能自己实现Spring事务原理吗?先自我检测下这些知识掌握了吗.那么接下来一起看下与Spring相关的事务 概念 事务具有ACID特性. 是指 ...
- String类自带的字符串处理原生方法
一.取出指定索引的字符 —— 使用charAt()方法 二.字符串与字符数组的转换 三.字符串转大写.先转换成数组,然后再改变ASCII码 四.给定一个字符串,要求判断其是否由数字组成 五.字符串与字 ...
- [javascript]jquery选择器笔记
技术文档 中文:http://jquery.cuishifeng.cn/ 英文:http://api.jquery.com/category/selectors/ 分类 基本选择器 层次选择器 过滤选 ...
- 关于 MongoDB 复制集
为什么要使用复制集 1.备份数据通过自带的 mongo_dump/mongo_restore 工具也可以实现备份,但是毕竟没有复制集的自动同步备份方便. 2.故障自动转移部署了复制集,当主节点挂了后, ...
- 设计模式--桥梁模式C++实现
1定义 将抽象和实现解耦,使得两者可以独立变化 2类图 3实现 #pragma once #include<iostream> using namespace std; class Imp ...