refrence :http://cloga.info/python/2014/02/07/classify_use_Sklearn/

加载数据集

这里我使用pandas来加载数据集,数据集采用kaggle的titanic的数据集,下载train.csv。

import pandas as pd
df = pd.read_csv('train.csv')
df = df.fillna(0) #将缺失值都替换为0
df.head()
  PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22 1 0 A/5 21171 7.2500 0 S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26 0 0 STON/O2. 3101282 7.9250 0 S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35 0 0 373450 8.0500 0 S

5 rows × 12 columns

len(df)
891

可以看到训练集中共有891条记录,有12个列(其中一列Survived是目标分类)。将数据集分为特征集和目标分类集,两个DataFrame。

exc_cols = [u'PassengerId', u'Survived', u'Name']
cols = [c for c in df.columns if c not in exc_cols]
x = df.ix[:,cols]
y = df['Survived'].values

由于Sklearn为了效率,接受的特征数据类型是dtype=np.float32以便获得最佳的算法效率。因此,对于类别类型的特征就需要转化为向量。Sklearn 提供了DictVectorizer类将类别的特征转化为向量。DictVectorizer接受记录的形式为字典的列表。因此需要用pandas的to_dict方法转 换DataFrame。

from sklearn.feature_extraction import DictVectorizer
v = DictVectorizer()
x = v.fit_transform(x.to_dict(outtype='records')).toarray()

让我们比较一下同一个实例的原始信息及向量化后的结果。

print 'Vectorized:', x[10]
print 'Unvectorized:', v.inverse_transform(x[10])
Vectorized: [ 4. 0. 0. ..., 0. 0. 0.]
Unvectorized: [{'Fare': 16.699999999999999, 'Name=Sandstrom, Miss. Marguerite Rut': 1.0, 'Embarked=S': 1.0, 'Age': 4.0, 'Sex=female': 1.0, 'Parch': 1.0, 'Pclass': 3.0, 'Ticket=PP 9549': 1.0, 'Cabin=G6': 1.0, 'SibSp': 1.0, 'PassengerId': 11.0}]

如果分类的标签也是字符的,那么就还需要用LabelEncoder方法进行转化。

将数据集分成训练集和测试集。

from sklearn.cross_validation import train_test_split
data_train, data_test, target_train, target_test = train_test_split(x, y)
len(data_train)
668
len(data_test)
223

默认是以数据集的25%作为测试集。到这里为止,用于训练和测试的数据集都已经准备好了。

用Sklearn做判别分析

Sklearn训练模型的基本流程

Model = EstimatorObject()
Model.fit(dataset.data, dataset.target)
dataset.data = dataset
dataset.target = labels
Model.predict(dataset.data)

这里选择朴素贝叶斯决策树随机森林SVM来做一个对比。

from sklearn import cross_validation
from sklearn.naive_bayes import GaussianNB
from sklearn import tree
from sklearn.ensemble import RandomForestClassifier
from sklearn import svm
import datetime
estimators = {}
estimators['bayes'] = GaussianNB()
estimators['tree'] = tree.DecisionTreeClassifier()
estimators['forest_100'] = RandomForestClassifier(n_estimators = 100)
estimators['forest_10'] = RandomForestClassifier(n_estimators = 10)
estimators['svm_c_rbf'] = svm.SVC()
estimators['svm_c_linear'] = svm.SVC(kernel='linear')
estimators['svm_linear'] = svm.LinearSVC()
estimators['svm_nusvc'] = svm.NuSVC()

首先是定义各个model所用的算法。

for k in estimators.keys():
start_time = datetime.datetime.now()
print '----%s----' % k
estimators[k] = estimators[k].fit(data_train, target_train)
pred = estimators[k].predict(data_test)
print("%s Score: %0.2f" % (k, estimators[k].score(data_test, target_test)))
scores = cross_validation.cross_val_score(estimators[k], data_test, target_test, cv=5)
print("%s Cross Avg. Score: %0.2f (+/- %0.2f)" % (k, scores.mean(), scores.std() * 2))
end_time = datetime.datetime.now()
time_spend = end_time - start_time
print("%s Time: %0.2f" % (k, time_spend.total_seconds()))
----svm_c_rbf----
svm_c_rbf Score: 0.63
svm_c_rbf Cross Avg. Score: 0.54 (+/- 0.18)
svm_c_rbf Time: 1.67
----tree----
tree Score: 0.81
tree Cross Avg. Score: 0.75 (+/- 0.09)
tree Time: 0.90
----forest_10----
forest_10 Score: 0.83
forest_10 Cross Avg. Score: 0.80 (+/- 0.10)
forest_10 Time: 0.56
----forest_100----
forest_100 Score: 0.84
forest_100 Cross Avg. Score: 0.80 (+/- 0.14)
forest_100 Time: 5.38
----svm_linear----
svm_linear Score: 0.74
svm_linear Cross Avg. Score: 0.65 (+/- 0.18)
svm_linear Time: 0.15
----svm_nusvc----
svm_nusvc Score: 0.63
svm_nusvc Cross Avg. Score: 0.55 (+/- 0.21)
svm_nusvc Time: 1.62
----bayes----
bayes Score: 0.44
bayes Cross Avg. Score: 0.47 (+/- 0.07)
bayes Time: 0.16
----svm_c_linear----
svm_c_linear Score: 0.83
svm_c_linear Cross Avg. Score: 0.79 (+/- 0.14)
svm_c_linear Time: 465.57

这里通过算法的score方法及cross_validation来计算预测的准确性。

可以看到准确性比较高的算法需要的时间也会增加。性价比较高的算法是随机森林。 让我们用kaggle给出的test.csv的数据集测试一下。

test = pd.read_csv('test.csv')
test = test.fillna(0)
test_d = test.to_dict(outtype='records')
test_vec = v.transform(test_d).toarray()

这里需要注意的是test的数据也需要经过同样的DictVectorizer转换。

for k in estimators.keys():
estimators[k] = estimators[k].fit(x, y)
pred = estimators[k].predict(test_vec)
test['Survived'] = pred
test.to_csv(k + '.csv', cols=['Survived', 'PassengerId'], index=False)

好了,向Kaggle提交你的结果吧~

[Example of Sklearn] - 分类对比的更多相关文章

  1. Sklearn分类树在合成数集上的表现

    小伙伴们大家好~o( ̄▽ ̄)ブ,今天我们开始来看一下Sklearn分类树的表现,我的开发环境是Jupyter lab,所用的库和版本大家参考: Python 3.7.1(你的版本至少要3.4以上) S ...

  2. sklearn分类

    近期的事务与sklearn有关,且主要用到了分类.在此做一点笔记 进行分类大概涉及三个知识点: 一. 分类器 二.特征选择 三.模型选择 一.分类器(Classification) 实例一:plot_ ...

  3. python + sklearn ︱分类效果评估——acc、recall、F1、ROC、回归、距离

    之前提到过聚类之后,聚类质量的评价: 聚类︱python实现 六大 分群质量评估指标(兰德系数.互信息.轮廓系数) R语言相关分类效果评估: R语言︱分类器的性能表现评价(混淆矩阵,准确率,召回率,F ...

  4. Python sklearn 分类效果评估

    https://blog.csdn.net/sinat_26917383/article/details/75199996

  5. sklearn调用分类算法的评价指标

    sklearn分类算法的评价指标调用#二分类问题的算法评价指标import numpy as npimport matplotlib.pyplot as pltimport pandas as pdf ...

  6. 特征选取1-from sklearn.feature_selection import SelectKBest

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  7. 基于Text-CNN模型的中文文本分类实战 流川枫 发表于AI星球订阅

    Text-CNN 1.文本分类 转眼学生生涯就结束了,在家待就业期间正好有一段空闲期,可以对曾经感兴趣的一些知识点进行总结. 本文介绍NLP中文本分类任务中核心流程进行了系统的介绍,文末给出一个基于T ...

  8. 基于Text-CNN模型的中文文本分类实战

    Text-CNN 1.文本分类 转眼学生生涯就结束了,在家待就业期间正好有一段空闲期,可以对曾经感兴趣的一些知识点进行总结. 本文介绍NLP中文本分类任务中核心流程进行了系统的介绍,文末给出一个基于T ...

  9. SVM算法

    本文主要介绍支持向量机理论推导及其工程应用. 1 基本介绍 支持向量机算法是一个有效的分类算法,可用于分类.回归等任务,在传统的机器学习任务中,通过人工构造.选择特征,然后使用支持向量机作为训练器,可 ...

随机推荐

  1. 装饰模式和python装饰器

    装饰器和装饰模式 先给出两者的定义: - 装饰器:装饰器是一个非常著名的设计模式,常常被用于有切面需求的场景.较为经典的有插入日志.性能測试.事务处理等. 装饰器是解决这类问题的绝佳设计.有了装饰器, ...

  2. 对生产者和消费者问题的另一个解决办法是使用QWaitCondition(封装好了wakeOne,wakeAll,而且与QReadWriteLock对接,几乎是万能的办法)

    对生产者和消费者问题的另一个解决办法是使用QWaitCondition,它允许线程在一定条件下唤醒其他线程.其中wakeOne()函数在条件满足时随机唤醒一个等待线程,而wakeAll()函数则在条件 ...

  3. POJ 2983 Is the Information Reliable? 依旧差分约束

    http://poj.org/problem?id=2983 题目大意: 星际大战开始了.你购买了情报,需要判断它的准确性.已知地方的根据地在由南向北排成一条直线.P A B X,表示A在B北面距离X ...

  4. [Nuxt] Build a Navigation Component in Vue.js and Use in a Nuxt Layout

    You can isolate parts of templates you want to re-use into components, but you can also reuse those ...

  5. zeros() 函数——MATLAB

    zeros函数——生成零矩阵 ones函数——生成全1阵 [zeros的使用方法] B=zeros(n):生成n×n全零阵. B=zeros(m,n):生成m×n全零阵. B=zeros([m n]) ...

  6. S​D​I​与​A​S​I 接口具体解释介绍

    分量编码 在对彩色电视信号进行数字化处理和传输是.一种经常使用的方式是分别对其3个分量(Y,R-Y.B-Y)进行数字化编码.这就是分量分量编码.另外还有全信号编码,全信号编码是对彩色全电视信号直接进行 ...

  7. js中json数据简单处理(JSON.parse()和js中嵌套html)

    js中json数据简单处理(JSON.parse()和js中嵌套html) 一.总结 1.html中嵌套js:<script>js代码</script> 2.js中嵌套html ...

  8. 反向代理:是指以代理server来接收Internet上的请求,然后将请求转发到内部网络的server上,并将结果返回给Internet上连接的client,此时的代理server对外就表现为反向代理server。

       Nginx安装好之后.開始使用它来简单实现反向代理与负载均衡的功能.在这之前.首先得脑补一下什么是反向代理和负载均衡.   反向代理:是指以代理server来接收Internet上的请求,然后将 ...

  9. Android 应用中十大常见 UX 错误 分类: H1_ANDROID 2013-09-21 13:59 404人阅读 评论(0) 收藏

    转载自:http://www.apkbus.com/android-5661-1.html 摘要: Android 开发者关系团队每天都会试用无数的 App 或者受到无数的开发者发来的请求评测的 Ap ...

  10. html5 video标签如何禁止视频下载

    html5 video标签如何禁止视频下载 一.总结 一句话总结:bing方法给video对象绑定return false的匿名方法. 1.html5 video标签如何禁止视频下载? bing方法给 ...