scikit-learn使用笔记与sign prediction简单小结

经Edwin Chen的推荐,认识了scikit-learn这个非常强大的python机器学习工具包。这个帖子作为笔记。(其实都没有笔记的意义,因为他家文档做的太好了,不过还是为自己记记吧,为以后节省若干分钟)。如果有幸此文被想用scikit-learn的你看见,也还是非常希望你去它们的主页看文档。主页中最值得关注的几个部分:User Guide几乎是machine learning的索引,各种方法如何使用都有,Reference是各个类的用法索引。

S1. 导入数据
大多数数据的格式都是M个N维向量,分为训练集和测试集。所以,知道如何导入向量(矩阵)数据是最为关键的一点。这里要用到numpy来协助。假设数据格式是:

复制代码

代码如下:

Stock prices indicator1 indicator2
2.0 123 1252
1.0 .. ..
.. . .
.

导入代码参考:

复制代码

代码如下:

import numpy as np
f = open("filename.txt")
f.readline() # skip the header
data = np.loadtxt(f)
X = data[:, 1:] # select columns 1 through end
y = data[:, 0] # select column 0, the stock price

libsvm格式的数据导入:

复制代码

代码如下:

>>> from sklearn.datasets import load_svmlight_file
>>> X_train, y_train = load_svmlight_file("/path/to/train_dataset.txt")
...
>>>X_train.todense()#将稀疏矩阵转化为完整特征矩阵

更多格式数据导入与生成参考:http://scikit-learn.org/stable/datasets/index.html

S2. Supervised Classification 几种常用方法:

Logistic Regression

复制代码

代码如下:

>>> from sklearn.linear_model import LogisticRegression
>>> clf2 = LogisticRegression().fit(X, y)
>>> clf2
LogisticRegression(C=1.0, intercept_scaling=1, dual=False, fit_intercept=True,
penalty='l2', tol=0.0001)
>>> clf2.predict_proba(X_new)
array([[ 9.07512928e-01, 9.24770379e-02, 1.00343962e-05]])

Linear SVM (Linear kernel)

复制代码

代码如下:

>>> from sklearn.svm import LinearSVC
>>> clf = LinearSVC()

>>> clf.fit(X, Y)
>>> X_new = [[ 5.0, 3.6, 1.3, 0.25]]
>>> clf.predict(X_new)#reuslt[0] if class label
array([0], dtype=int32)

SVM (RBF or other kernel)

复制代码

代码如下:

>>> from sklearn import svm
>>> clf = svm.SVC()
>>> clf.fit(X, Y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3,
gamma=0.0, kernel='rbf', probability=False, shrinking=True, tol=0.001,
verbose=False)
>>> clf.predict([[2., 2.]])
array([ 1.])

Naive Bayes (Gaussian likelihood)

复制代码

代码如下:

from sklearn.naive_bayes import GaussianNB
>>> from sklearn import datasets
>>> gnb = GaussianNB()
>>> gnb = gnb.fit(x, y)
>>> gnb.predict(xx)#result[0] is the most likely class label

Decision Tree (classification not regression)

复制代码

代码如下:

>>> from sklearn import tree
>>> clf = tree.DecisionTreeClassifier()
>>> clf = clf.fit(X, Y)
>>> clf.predict([[2., 2.]])
array([ 1.])

Ensemble (Random Forests, classification not regression)

复制代码

代码如下:

>>> from sklearn.ensemble import RandomForestClassifier
>>> clf = RandomForestClassifier(n_estimators=10)
>>> clf = clf.fit(X, Y)
>>> clf.predict(X_test)

S3. Model Selection (Cross-validation)
手工分training data和testing data当然可以了,但是更方便的方法是自动进行,scikit-learn也有相关的功能,这里记录下cross-validation的代码:

复制代码

代码如下:

>>> from sklearn import cross_validation
>>> from sklearn import svm
>>> clf = svm.SVC(kernel='linear', C=1)
>>> scores = cross_validation.cross_val_score(clf, iris.data, iris.target, cv=5)#5-fold cv
#change metrics
>>> from sklearn import metrics
>>> cross_validation.cross_val_score(clf, iris.data, iris.target, cv=5, score_func=metrics.f1_score)
#f1 score: <a href="http://en.wikipedia.org/wiki/F1_score">http://en.wikipedia.org/wiki/F1_score</a>

more about cross-validation: http://scikit-learn.org/stable/modules/cross_validation.html

Note: if using LR, clf = LogisticRegression().

S4. Sign Prediction Experiment
数据集,EPINIONS,有user与user之间的trust与distrust关系,以及interaction(对用户评论的有用程度打分)。

Features:网络拓扑feature参考"Predict positive and negative links in online social network",用户交互信息feature。

一共设了3类instances,每类3次训练+测试,训练数据是测试数据的10倍,~80,000个29/5/34维向量,得出下面一些结论。时间上,GNB最快(所有instance都是2~3秒跑完),DT非常快(有一类instance只用了1秒,其他都要4秒),LR很快(三类instance的时间分别是2秒,5秒,~30秒),RF也不慢(一个instance9秒,其他26秒),linear kernel的SVM要比LR慢好几倍(所有instance要跑30多秒),RBF kernel的SVM比linear SVM要慢20+倍到上百倍(第一个instance要11分钟,第二个instance跑了近两个小时)。准确度上RF>LR>DT>GNB>SVM(RBF kernel)>SVM(Linear kernel)。GNB和SVM(linear kernel)、SVM(rbf kernel)在第二类instance上差的比较远(10~20个百分点),LR、DT都差不多,RF确实体现了ENSEMBLE方法的强大,比LR有较为显著的提升(近2~4个百分点)。(注:由于到该文提交为止,RBF版的SVM才跑完一次测试中的两个instance,上面结果仅基于此。另外,我还尝试了SGD等方法,总体上都不是特别理想,就不记了)。在feature的有效性上面,用户交互feature比网络拓扑feature更加有效百分五到百分十。

S5.通用测试源代码

这里是我写的用包括上述算法在内的多种算法的自动分类并10fold cross-validation的python代码,只要输入文件保持本文开头所述的格式(且不包含注释信息),即可用多种不同算法测试分类效果。Download.

(0)

相关推荐

  • 有道云笔记怎么打印笔记

    有道云笔记怎么打印笔记?其实很简单,下面由我带给大家有道云笔记怎么打印的方法教程. 操作方法 01 首先我们选择想要打印的文档笔记,然后右击: 02 接下来,我们接下来会在他弹出来的属性中选择打印. ...

  • 如何使用印象笔记·圈点的详细使用图文教程

    小编只记得有这么个软件,没怎么去了解,后来玩疯狂猜图,里面就有这么一道题,才发现印象笔记这个软件很出名,小编一直以为印象笔记只是一个小众品牌而已,看来小编实在out了。今天小编就来介绍下印象笔记旗下的 ...

  • 印象笔记·圈点如何使用小白教程

    小编只记得有这么个软件,没怎么去了解,后来玩疯狂猜图,里面就有这么一道题,才发现印象笔记这个软件很出名,小编一直以为印象笔记只是一个小众品牌而已,看来小编实在out了。今天小编就来介绍下印象笔记旗下的 ...

  • 如何提取视频字幕文字(怎么把视频里的字幕提取出来)

    简单看了一下其实就是将视频转换为文字,然后方便制作笔记或保存,简单分享几个我用过的转换工具,转成文本文档很方便!需要的小伙伴赶快码住~1.网易见外工作台网址:    https://jianwai.y ...

  • 百度浏览器:浏览简单化 应用极致化

    几天前看到百度浏览器开始公测的消息,就准备找时间试一试。如今浏览器市场打的火热,各家浏览器都一门心思推出五花八门的标准和功能,互联网入口之争出现了百家争鸣的局面…… 几天前看到百度浏览器开始公测的消息 ...

  • 从完成视觉稿到上线,你还需要做这些(下)

    上一篇传送门:<从完成视觉稿到上线,你还需要做这些(上)> 上一篇讲的是适配标注以及切图,这次来讲后面的三步:制作Demo.跟进开发以及验收. 制作Demo 制作Demo可以在完成适配标注 ...

  • 忘仙OL先锋攻略鬼煞职业攻略

    忘仙OL身为国内首款跨IOS.android平台的游戏巨作,具有划时代的意义所在,而且在游戏开发的过程中充分运用了3D渲染和粒子效果技术,给游戏带来了精彩绝伦的视觉效果.作为一个最要好的修仙类型手机网 ...

  • 欧姆龙 PLC 触摸屏 简单学习笔记

    操作方法 01 /***/***/***/***/***/***/***/***/***/***/***/***/***/***/***/***/***/***/***/***/***/***/*** ...

  • 简单技巧解决笔记本显卡驱动问题

    自从笔记本越来越便宜开始,笔记本大有像手机一样的人手一机的趋势。因携带方便,搬运比台式机轻松不少。,得到除游戏狂热者以外的绝大多数人青睐。然而,笔记本出厂都自带有厂家OEM版的操作系统。如果碰巧你不喜 ...