主頁 > 知識庫 > scikit-learn使用筆記與sign prediction簡單小結(jié)

scikit-learn使用筆記與sign prediction簡單小結(jié)

熱門標(biāo)簽:美團(tuán) 百度競價(jià)點(diǎn)擊價(jià)格的計(jì)算公式 家政服務(wù)網(wǎng)絡(luò) 服務(wù)器配置 電話機(jī)器人搭建 硅谷的囚徒呼叫中心 解決方案 外呼系統(tǒng)

經(jīng)Edwin Chen的推薦,認(rèn)識了scikit-learn這個(gè)非常強(qiáng)大的python機(jī)器學(xué)習(xí)工具包。這個(gè)帖子作為筆記。(其實(shí)都沒有筆記的意義,因?yàn)樗椅臋n做的太好了,不過還是為自己記記吧,為以后節(jié)省若干分鐘)。如果有幸此文被想用scikit-learn的你看見,也還是非常希望你去它們的主頁看文檔。主頁中最值得關(guān)注的幾個(gè)部分:User Guide幾乎是machine learning的索引,各種方法如何使用都有,Reference是各個(gè)類的用法索引。

S1. 導(dǎo)入數(shù)據(jù)
大多數(shù)數(shù)據(jù)的格式都是M個(gè)N維向量,分為訓(xùn)練集和測試集。所以,知道如何導(dǎo)入向量(矩陣)數(shù)據(jù)是最為關(guān)鍵的一點(diǎn)。這里要用到numpy來協(xié)助。假設(shè)數(shù)據(jù)格式是:


復(fù)制代碼
代碼如下:

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

導(dǎo)入代碼參考:


復(fù)制代碼
代碼如下:

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格式的數(shù)據(jù)導(dǎo)入:


復(fù)制代碼
代碼如下:

>>> from sklearn.datasets import load_svmlight_file
>>> X_train, y_train = load_svmlight_file("/path/to/train_dataset.txt")
...
>>>X_train.todense()#將稀疏矩陣轉(zhuǎn)化為完整特征矩陣

更多格式數(shù)據(jù)導(dǎo)入與生成參考:http://scikit-learn.org/stable/datasets/index.html


S2. Supervised Classification 幾種常用方法:

Logistic Regression


復(fù)制代碼
代碼如下:

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


復(fù)制代碼
代碼如下:

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


復(fù)制代碼
代碼如下:

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


復(fù)制代碼
代碼如下:

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)


復(fù)制代碼
代碼如下:

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

Ensemble (Random Forests, classification not regression)


復(fù)制代碼
代碼如下:

>>> 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當(dāng)然可以了,但是更方便的方法是自動(dòng)進(jìn)行,scikit-learn也有相關(guān)的功能,這里記錄下cross-validation的代碼:


復(fù)制代碼
代碼如下:

>>> 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 >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
數(shù)據(jù)集,EPINIONS,有user與user之間的trust與distrust關(guān)系,以及interaction(對用戶評論的有用程度打分)。

Features:網(wǎng)絡(luò)拓?fù)鋐eature參考"Predict positive and negative links in online social network",用戶交互信息feature。

一共設(shè)了3類instances,每類3次訓(xùn)練+測試,訓(xùn)練數(shù)據(jù)是測試數(shù)據(jù)的10倍,~80,000個(gè)29/5/34維向量,得出下面一些結(jié)論。時(shí)間上,GNB最快(所有instance都是2~3秒跑完),DT非常快(有一類instance只用了1秒,其他都要4秒),LR很快(三類instance的時(shí)間分別是2秒,5秒,~30秒),RF也不慢(一個(gè)instance9秒,其他26秒),linear kernel的SVM要比LR慢好幾倍(所有instance要跑30多秒),RBF kernel的SVM比linear SVM要慢20+倍到上百倍(第一個(gè)instance要11分鐘,第二個(gè)instance跑了近兩個(gè)小時(shí))。準(zhǔn)確度上RF>LR>DT>GNB>SVM(RBF kernel)>SVM(Linear kernel)。GNB和SVM(linear kernel)、SVM(rbf kernel)在第二類instance上差的比較遠(yuǎn)(10~20個(gè)百分點(diǎn)),LR、DT都差不多,RF確實(shí)體現(xiàn)了ENSEMBLE方法的強(qiáng)大,比LR有較為顯著的提升(近2~4個(gè)百分點(diǎn))。(注:由于到該文提交為止,RBF版的SVM才跑完一次測試中的兩個(gè)instance,上面結(jié)果僅基于此。另外,我還嘗試了SGD等方法,總體上都不是特別理想,就不記了)。在feature的有效性上面,用戶交互feature比網(wǎng)絡(luò)拓?fù)鋐eature更加有效百分五到百分十。

S5.通用測試源代碼

這里是我寫的用包括上述算法在內(nèi)的多種算法的自動(dòng)分類并10fold cross-validation的python代碼,只要輸入文件保持本文開頭所述的格式(且不包含注釋信息),即可用多種不同算法測試分類效果。Download.

標(biāo)簽:臨沂 韶關(guān) 防城港 邢臺 撫州 烏蘭察布 南昌 北海

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《scikit-learn使用筆記與sign prediction簡單小結(jié)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266