[Example of Sklearn] - 分类对比

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提交你的结果吧~

时间: 2024-10-14 11:47:36

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

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

小伙伴们大家好~o( ̄▽ ̄)ブ,今天我们开始来看一下Sklearn分类树的表现,我的开发环境是Jupyter lab,所用的库和版本大家参考: Python 3.7.1(你的版本至少要3.4以上) Scikit-learn 0.20.0 (你的版本至少要0.20) Graphviz 0.8.4 (没有画不出决策树哦,安装代码conda install python-graphviz) Numpy 1.15.3, Pandas 0.23.4, Matplotlib 3.0.1, SciPy 1.1

分类对比高级语言、操作系统、前后端,数据库、服务端

操作系统对比(包括服务器操纵系统): Windows系统windows服务器操作系统我们都比较熟悉,它是Microsoft公司开发的,Microsoft是全球最大的操作系统开发商.Windows系统在局域网配置中是最常见的,但由于它对服务器的硬件要求较高,且稳定性不是很好,作为WEB服务器使用时,巨大的内核通讯量不是windows可以承受的,所以微软的服务器操作系统一般只是用在中.低档服务器中.当然Windows系统也有自己的优点,windows在PC时代已经家喻户晓,在易用性方面,没有人比Wi

机器学习之sklearn数据集

数据集划分 机器学习一般的数据集会划分为两个部分: 训练数据:用于训练,构建模型 测试数据:在模型检验时使用,用于评估模型是否有效 sklearn数据集划分API sklearn.model_selection.train_test_split x 数据集的特征值 y 数据集的标签值 test_size 测试集的大小,一般为float random_state 随机数种子,不同的种子会造成不同的随机采样结果.相同的种子采样结果相同. return 训练集特征值,测试集特征值,训练标签,测试标签(

看完这篇文章,包你懂得如何用Python实现聚类算法的层次算法!

什么是聚类 将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类.由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异.聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法. 聚类分析起源于分类学,但是聚类不等于分类.聚类与分类的不同在于,聚类所要求划分的类是未知的.聚类分析内容非常丰富,有系统聚类法.有序样品聚类法.动态聚类法.模糊聚类法.图论聚类法.聚类预报法等. 起步 层次聚类( Hierarchical Cluste

[译]用R语言做挖掘数据《七》

时间序列与数据挖掘 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到: 1. LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令2. GVim:非常好用的编辑器,最简单的用法可以参考课程Vim编辑器3. R:在命令行输入‘R’进入交互式环境,下面的代码都是在交互式环境运行4. 数据:在命令行终端输入以下命令:

《BI那点儿事》Microsoft 聚类分析算法——三国人物身份划分

什么是聚类分析? 聚类分析属于探索性的数据分析方法.通常,我们利用聚类分析将看似无序的对象进行分组.归类,以达到更好地理解研究对象的目的.聚类结果要求组内对象相似性较高,组间对象相似性较低.在三国数据分析中,很多问题可以借助聚类分析来解决,比如三国人物身份划分.聚类分析的基本过程是怎样的?  选择聚类变量 在分析三国人物身份的时候,我们会根据一定的假设,尽可能选取对角色身份有影响的变量,这些变量一般包含与身份密切相关的统率.武力.智力.政治.魅力.特技.枪兵.戟兵.弩兵.骑兵.兵器.水军等.但是

《NoSQL入门》关于NoSQL

关于NoSQL的专栏申请了可能快一年了,也没有填充一篇文章,今天看到,还是先写一篇放进去吧.现在应用NoSQL的人也非常多了,大家可能都不再陌生了,中文方面的资料已经漫天飞舞了.但是查看知乎中 NoSQL 相关话题的回答数却寥寥无几.可能是大家都更多的去关注相关实际技术的应用了,而忽略了这一概念的本质. 什么是NoSQL? 百度百科中:NoSQL,泛指非关系型的数据库.中文名:非关系型数据库,外文名:NoSQL=Not Only SQL 看 Wikipedia中:A NoSQL (origina

视音频编解码基本术语及解释

摘要:          整理了一些基本视音频术语,用于入门和查询使用. H264: H264是视频的标准,是MPEG4-10,基于内容的高效编码方式. H.264/MPEG-4第10部分,或称AVC(AdvancedVideo Coding,高级视频编码),是一种视频压缩标准,一种被广泛使用的高精度视频的录制.压缩和发布格式.第一版标准的最终草案于 整理了一些基本视音频术语,用于入门和查询使用. H264: H264是视频的标准,是MPEG4-10,基于内容的高效编码方式. H.264/MPE

微软数据挖掘算法:Microsoft顺序分析和聚类分析算法(8)

前言 本篇文章继续我们的微软挖掘系列算法总结,前几篇文章已经将相关的主要算法做了详细的介绍,我为了展示方便,特地的整理了一个目录提纲篇:大数据时代:深入浅出微软数据挖掘算法总结连载,有兴趣的童鞋可以点击查阅,本篇我们将要总结的算法为:Microsoft顺序分析和聚类分析算法,此算法为上一篇中的关联规则分析算法的一个延伸,为关联规则分析算法所形成的种类进行了更细粒度的挖掘,挖掘出不同种类内部的事例间的顺序原则,进而用以引导用户进行消费. 应用场景介绍 Microsoft顺序分析和聚类分析算法,根据