再论sklearn分类器
这几天在看 sklearn 的文档,发现他的分类器有很多,这里做一些简略的记录。
大致可以将这些分类器分成两类: 1)单一分类器,2)集成分类器
一、单一分类器
下面这个例子对一些单一分类器效果做了比较
from sklearn.cross_validation import cross_val_score from sklearn.datasets import make_blobs# meta-estimator from sklearn.neighbors import KNeighborsClassifier from sklearn.svm import SVC from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.ensemble import ExtraTreesClassifier from sklearn.ensemble import AdaBoostClassifier from sklearn.ensemble import GradientBoostingClassifier from sklearn.naive_bayes import GaussianNB from sklearn.discriminant_analysis import LinearDiscriminantAnalysis from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysisclassifiers = {'KN': KNeighborsClassifier(3),'SVC': SVC(kernel="linear", C=0.025),'SVC': SVC(gamma=2, C=1),'DT': DecisionTreeClassifier(max_depth=5),'RF': RandomForestClassifier(n_estimators=10, max_depth=5, max_features=1), # clf.feature_importances_'ET': ExtraTreesClassifier(n_estimators=10, max_depth=None), # clf.feature_importances_'AB': AdaBoostClassifier(n_estimators=100),'GB': GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0), # clf.feature_importances_'GNB': GaussianNB(),'LD': LinearDiscriminantAnalysis(),'QD': QuadraticDiscriminantAnalysis()}X, y = make_blobs(n_samples=10000, n_features=10, centers=100, random_state=0)for name, clf in classifiers.items():scores = cross_val_score(clf, X, y)print(name,'\t--> ',scores.mean())
下图是效果图:
二、集成分类器
集成分类器有四种:Bagging, Voting, GridSearch, PipeLine。最后一个PipeLine其实是管道技术
1.Bagging
from sklearn.ensemble import BaggingClassifier from sklearn.neighbors import KNeighborsClassifiermeta_clf = KNeighborsClassifier() bg_clf = BaggingClassifier(meta_clf, max_samples=0.5, max_features=0.5)
2.Voting
from sklearn import datasets from sklearn import cross_validation from sklearn.linear_model import LogisticRegression from sklearn.naive_bayes import GaussianNB from sklearn.ensemble import RandomForestClassifier from sklearn.ensemble import VotingClassifieriris = datasets.load_iris() X, y = iris.data[:, 1:3], iris.targetclf1 = LogisticRegression(random_state=1) clf2 = RandomForestClassifier(random_state=1) clf3 = GaussianNB()eclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('gnb', clf3)], voting='hard', weights=[2,1,2])for clf, label in zip([clf1, clf2, clf3, eclf], ['Logistic Regression', 'Random Forest', 'naive Bayes', 'Ensemble']):scores = cross_validation.cross_val_score(clf, X, y, cv=5, scoring='accuracy')print("Accuracy: %0.2f (+/- %0.2f) [%s]" % (scores.mean(), scores.std(), label))
3.GridSearch
import numpy as npfrom sklearn.datasets import load_digitsfrom sklearn.ensemble import RandomForestClassifier from sklearn.grid_search import GridSearchCV from sklearn.grid_search import RandomizedSearchCV# 生成数据 digits = load_digits() X, y = digits.data, digits.target# 元分类器 meta_clf = RandomForestClassifier(n_estimators=20)# ================================================================= # 设置参数 param_dist = {"max_depth": [3, None],"max_features": sp_randint(1, 11),"min_samples_split": sp_randint(1, 11),"min_samples_leaf": sp_randint(1, 11),"bootstrap": [True, False],"criterion": ["gini", "entropy"]}# 运行随机搜索 RandomizedSearch n_iter_search = 20 rs_clf = RandomizedSearchCV(meta_clf, param_distributions=param_dist,n_iter=n_iter_search)start = time() rs_clf.fit(X, y) print("RandomizedSearchCV took %.2f seconds for %d candidates"" parameter settings." % ((time() - start), n_iter_search)) print(rs_clf.grid_scores_)# ================================================================= # 设置参数 param_grid = {"max_depth": [3, None],"max_features": [1, 3, 10],"min_samples_split": [1, 3, 10],"min_samples_leaf": [1, 3, 10],"bootstrap": [True, False],"criterion": ["gini", "entropy"]}# 运行网格搜索 GridSearch gs_clf = GridSearchCV(meta_clf, param_grid=param_grid) start = time() gs_clf.fit(X, y)print("GridSearchCV took %.2f seconds for %d candidate parameter settings."% (time() - start, len(gs_clf.grid_scores_))) print(gs_clf.grid_scores_)
4.PipeLine
第一个例子
from sklearn import svm from sklearn.datasets import samples_generator from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import f_regression from sklearn.pipeline import Pipeline# 生成数据 X, y = samples_generator.make_classification(n_informative=5, n_redundant=0, random_state=42)# 定义Pipeline,先方差分析,再SVM anova_filter = SelectKBest(f_regression, k=5) clf = svm.SVC(kernel='linear') pipe = Pipeline([('anova', anova_filter), ('svc', clf)])# 设置anova的参数k=10,svc的参数C=0.1(用双下划线"__"连接!) pipe.set_params(anova__k=10, svc__C=.1) pipe.fit(X, y)prediction = pipe.predict(X)pipe.score(X, y) # 得到 anova_filter 选出来的特征 s = pipe.named_steps['anova'].get_support() print(s)
第二个例子
import numpy as npfrom sklearn import linear_model, decomposition, datasets from sklearn.pipeline import Pipeline from sklearn.grid_search import GridSearchCVdigits = datasets.load_digits() X_digits = digits.data y_digits = digits.target# 定义管道,先降维(pca),再逻辑回归 pca = decomposition.PCA() logistic = linear_model.LogisticRegression() pipe = Pipeline(steps=[('pca', pca), ('logistic', logistic)])# 把管道再作为grid_search的estimator n_components = [20, 40, 64] Cs = np.logspace(-4, 4, 3) estimator = GridSearchCV(pipe, dict(pca__n_components=n_components, logistic__C=Cs))estimator.fit(X_digits, y_digits)
再论sklearn分类器相关推荐
- sklearn分类器算法:逻辑回归及案例分析
分类算法之逻辑回归 逻辑回归(Logistic Regression),简称LR.它的特点是能够是我们的特征输入集合转化为0和1这两类的概率.一般来说,回归不用在分类问题上,因为回归是连续型模型,而且 ...
- sklearn分类器算法:决策树与随机森林及案例分析
分类算法之决策树 决策树是一种基本的分类方法,当然也可以用于回归.我们一般只讨论用于分类的决策树.决策树模型呈树形结构.在分类问题中,表示基于特征对实例进行分类的过程,它可以认为是if-then规则的 ...
- sklearn分类器性能评估
分类器性能评估 在许多实际问题中,衡量分类器任务的成功程度是通过固定的性能指标来获取.一般最常见使用的是准确率,即预测结果正确的百分比.然而有时候,我们关注的是负样本是否被正确诊断出来.例如,关于肿瘤 ...
- sklearn分类器:朴素贝叶斯
朴素贝叶斯 朴素贝叶斯(Naive Bayes)是一个非常简单,但是实用性很强的分类模型.朴素贝叶斯分类器的构造基础是贝叶斯理论. 概率论基础 概率定义为一件事情发生的可能性.事情发生的概率可以 通过 ...
- sklearn中分类器的比较
简 介: 运行对比了 分类器的比较? 中的sklearn中的分类的性能对比.这为我们理解机器学习中的特性提供了理解基础. 关键词: sklearn,python #mermaid-svg-UbOwlP ...
- 尝试使用sklearn自动进行多模型预测并计算权重
待解决的问题 在拥有多个模型的情况下,是否可以通过给多个模型分配权重(weight),使得加权后的多模型预测结果要好于单模型? 思路 是否存在通用的多模型weight计算方式? 如果没有,是否存在其他 ...
- Python小白机器学习教程:Sklearn精讲
点击"简说Python",选择"置顶/星标公众号" 福利干货,第一时间送达! 本文授权转载自王的机器 禁二次转载 作者:王圣元 阅读文本大概需要 60 分钟 老 ...
- 盘一盘 Python 系列 - Sklearn
全文共 26745 字,106 幅图表, 预计阅读时间 67 分钟. 0 引言 本文是 Python 系列的第十一篇 Python 入门篇 (上) Python 入门篇 (下) 数组计算之 NumPy ...
- 分类器MNIST交叉验证准确率、混淆矩阵、精度和召回率(PR曲线)、ROC曲线、多类别分类器、多标签分类、多输出分类
本博客是在Jupyter Notebook下进行的编译. 目录 MNIST 训练一个二分类器 使用交叉验证测量精度 混淆矩阵 精度和召回率 精度/召回率权衡 ROC曲线 多类别分类器 错误分析 多标签 ...
- 非常详细的sklearn介绍
0 引言 Sklearn (全称 Scikit-Learn) 是基于 Python 语言的机器学习工具.它建立在 NumPy, SciPy, Pandas 和 Matplotlib 之上,里面的 AP ...
最新文章
- 句法分析应用领域及意义
- 数学图形(1.42)拱形曲线
- java内部类的特点
- TreeView 实现单选与多选!
- UVA11069 A Graph Problem【递推】
- python基础教程免费下载-《Python机器学习基础教程》高清版免费PDF下载
- 【原】数据分析/数据挖掘/机器学习---- 必读书目
- BZOJ 1934 善意的投票
- 如何在微软的下载商店找到下载的图片?
- tulater成语词典 chm格式 和 EXE格式
- GAN-评价指标IS以及FID、KID
- iOS iPhone X底部设置高度 白色底部显示
- 百度商桥点击咨询自定义按钮
- upc Cafebazaar’s Chess Tournament 思维 + FFT
- 无线网ppp服务器失败怎么办,【妙招】不能上网怎么办,史上最全宽带故障简单处理办法!...
- 2015版本的pdf文件合并拆分软件
- 百度 翻译 api 使用
- kali的网络设置及三种网络模式
- Spring MVC原理解析
- 全国30米土地利用数据分享(1980-2020)