再论sklearn分类器

简介: 这几天在看 sklearn 的文档,发现他的分类器有很多,这里做一些简略的记录。 大致可以将这些分类器分成两类: 1)单一分类器,2)集成分类器   一、单一分类器 下面这个例子对一些单一分类器效果做了比较 from 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 QuadraticDiscriminantAnalysis


classifiers = {
    '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 KNeighborsClassifier

meta_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 VotingClassifier

iris = datasets.load_iris()
X, y = iris.data[:, 1:3], iris.target

clf1 = 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 np

from sklearn.datasets import load_digits

from 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 np

from sklearn import linear_model, decomposition, datasets
from sklearn.pipeline import Pipeline
from sklearn.grid_search import GridSearchCV


digits = 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)

 

目录
相关文章
|
5月前
|
机器学习/深度学习 存储 算法
sklearn应用线性回归算法
sklearn应用线性回归算法
63 0
|
5月前
|
Python
使用Python实现基本的线性回归模型
使用Python实现基本的线性回归模型
165 8
使用Python实现基本的线性回归模型
|
2月前
|
机器学习/深度学习 数据采集 Python
利用Python实现简单的线性回归模型
【8月更文挑战第29天】本文将引导你了解并实践如何使用Python编程语言实现一个简单的线性回归模型。我们将通过一个实际的数据集,一步步地展示如何进行数据预处理、建立模型、训练及评估模型性能。文章旨在为初学者提供一个易于理解且实用的编程指南,帮助他们快速入门机器学习领域。
|
3月前
|
机器学习/深度学习 算法 API
Sklearn中的监督学习全览:从线性回归到SVM
【7月更文第23天】 在机器学习的广阔领域中,监督学习占据着举足轻重的地位,它通过已标记的数据集学习输入与输出之间的映射关系,进而对未知数据进行预测。`scikit-learn`(简称sklearn)作为Python中最受欢迎的机器学习库之一,提供了丰富的监督学习算法。本篇文章将带您深入探索sklearn中的监督学习世界,从简单的线性回归到复杂的支撑向量机(SVM),并通过实战代码示例,让您对这些算法有更直观的理解。
52 8
|
3月前
|
机器学习/深度学习 算法 前端开发
集成学习的力量:Sklearn中的随机森林与梯度提升详解
【7月更文第23天】集成学习,作为机器学习中一种强大而灵活的技术,通过结合多个基础模型的预测来提高整体预测性能。在`scikit-learn`(简称sklearn)这一Python机器学习库中,随机森林(Random Forest)和梯度提升(Gradient Boosting)是两种非常流行的集成学习方法。本文将深入解析这两种方法的工作原理,并通过代码示例展示它们在sklearn中的应用。
96 10
|
5月前
|
机器学习/深度学习 算法 数据挖掘
数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
|
5月前
|
机器学习/深度学习 计算机视觉
数据分享|R语言GLM广义线性模型:逻辑回归、泊松回归拟合小鼠临床试验数据(剂量和反应)示例和自测题
数据分享|R语言GLM广义线性模型:逻辑回归、泊松回归拟合小鼠临床试验数据(剂量和反应)示例和自测题
|
5月前
|
机器学习/深度学习 Python
使用Python实现逻辑回归模型
使用Python实现逻辑回归模型
54 9
一、线性回归的两种实现方式:(二)sklearn实现
一、线性回归的两种实现方式:(二)sklearn实现
|
5月前
|
机器学习/深度学习 算法 数据挖掘
回归分析讲解及一元线性回归和逻辑回归对iris数据集分析实战(附源码 超详细)
回归分析讲解及一元线性回归和逻辑回归对iris数据集分析实战(附源码 超详细)
167 0
下一篇
无影云桌面