在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

scikit-learn的操作流程幾一體化實現(xiàn)的優(yōu)勢

lviY_AI_shequ ? 2017-12-08 13:40 ? 次閱讀

scikit-learn簡介

scikit-learn是Python最為流行的一個機器學(xué)習(xí)庫。它具有如下吸引人的特點:

簡單、高效且異常豐富的數(shù)據(jù)挖掘/數(shù)據(jù)分析算法實現(xiàn);

基于NumPy,SciPy,以及matplotlib,從數(shù)據(jù)探索性分析,數(shù)據(jù)可視化到算法實現(xiàn),整個過程一體化實現(xiàn);

尤其是當(dāng)我們要進行多種算法的效果對比評價,這種一體化實現(xiàn)的優(yōu)勢就更加能夠凸顯出來了。

既然scikit-learn模塊如此重要,廢話不多說,下面馬上開搞!

項目組織及文件加載

項目組織

工作路徑:`D:\my_python_workfile\Thesis\sklearn_exercise` |--data:用于存放數(shù)據(jù) |--20news-bydate:練習(xí)用數(shù)據(jù)集 |--20news-bydate-train:訓(xùn)練集 |--20news-bydate-test:測試集

文件加載

假設(shè)我們需要加載的數(shù)據(jù),組織結(jié)構(gòu)如下:

container_folder/ category_1_folder/ file_1.txt file_2.txt ... file_42.txt category_2_folder/ file_43.txt file_44.txt ...

可以使用以下函數(shù)進行數(shù)據(jù)的加載:

sklearn.datasets.load_files(container_path, description=None, categories=None, load_content=True, shuffle=True, encoding=None, decode_error='strict', random_state=0)

參數(shù)解釋:

`container_path`:container_folder的路徑;

`load_content = True`:是否把文件中的內(nèi)容加載到內(nèi)存;

`encoding = None`:編碼方式。當(dāng)前文本文件的編碼方式一般為“utf-8”,如果不指明編碼方式(encoding=None),那么文件內(nèi)容將會按照bytes處理,而不是unicode處理。

返回值:Bunch Dictionary-like object.主要屬性有

data:原始數(shù)據(jù);

filenames:每個文件的名字;

target:類別標(biāo)簽(從0開始的整數(shù)索引);

target_names:類別標(biāo)簽的具體含義(由子文件夾的名字`category_1_folder`等決定)。

下面,即采用這種方式,使用測試數(shù)據(jù)集[The 20 Newsgroups data set](Home Page for 20 Newsgroups Data Set:http://qwone.com/~jason/20Newsgroups/)進行實例演示。先從網(wǎng)上下載該數(shù)據(jù)集,再在本地進行數(shù)據(jù)的加載。

```python# 加載庫import osimport sys##配置utf-8輸出環(huán)境#reload(sys)#sys.setdefaultencoding("utf-8")# 設(shè)置當(dāng)前工作路徑os.chdir("D:\\my_python_workfile\\Thesis\\sklearn_exercise")# 加載數(shù)據(jù)from sklearn import datasetstwenty_train = datasets.load_files("data/20news-bydate/20news-bydate-train")twenty_test = datasets.load_files("data/20news-bydate/20news-bydate-test")``````pythonlen(twenty_train.target_names),len(twenty_train.data),len(twenty_train.filenames),len(twenty_test.data)```

(20, 11314, 11314, 7532)

```python print("\n".join(twenty_train.data[0].split("\n")[:3])) ```

From: cubbie@garnet.berkeley.edu ( )

Subject: Re: Cubs behind Marlins? How?

Article-I.D.: agate.1pt592$f9a

```python print(twenty_train.target_names[twenty_train.target[0]]) ```

rec.sport.baseball

```python twenty_train.target[:10] ```

array([ 9, 4, 11, 4, 0, 4, 5, 5, 13, 12])

可見,文件已經(jīng)被成功載入。

當(dāng)然,作為入門的訓(xùn)練,我們也可以使用`scikit-learn`自帶的`toy example`數(shù)據(jù)集進行測試、玩耍。下面,介紹一下如何加載自帶的數(shù)據(jù)集。

```python from sklearn.datasets import fetch_20newsgroups categories = ['alt.atheism', 'soc.religion.christian', 'comp.graphics', 'sci.med'] twenty_train = fetch_20newsgroups(subset='train', categories=categories, shuffle=True, random_state=42) ```文本特征提取

文本數(shù)據(jù)屬于非結(jié)構(gòu)化的數(shù)據(jù),一般要轉(zhuǎn)換成結(jié)構(gòu)化的數(shù)據(jù),方能進行實施機器學(xué)習(xí)算法實現(xiàn)文本分類。

常見的做法是將文本轉(zhuǎn)換成『文檔-詞項矩陣』。矩陣中的元素,可以使用詞頻,或者TF-IDF值等。

計算詞頻

```python from sklearn.feature_extraction.text import CountVectorizer count_vect = CountVectorizer(stop_words="english",decode_error='ignore') X_train_counts = count_vect.fit_transform(twenty_train.data) X_train_counts.shape ```

(11314, 129783)

使用TF-IDF進行特征提取

```python from sklearn.feature_extraction.text import TfidfTransformer tf_transformer = TfidfTransformer(use_idf = False).fit(X_train_counts) X_train_tf = tf_transformer.transform(X_train_counts) X_train_tf.shape ```

(11314, 129783)

以上程序使用了兩步進行文本的形式化表示:先用`fit()`方法使得模型適用數(shù)據(jù);再用`transform()`方法把詞頻矩陣重新表述成TF-IDF.

如下所示,也可以一步到位進行設(shè)置。

```python tfidf_transformer = TfidfTransformer() X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts) X_train_tfidf.shape ```

(11314, 129783)]

分類器訓(xùn)練

```python from sklearn.naive_bayes import MultinomialNB clf = MultinomialNB().fit(X_train_tfidf,twenty_train.target) ``````python # 對新的樣本進行預(yù)測 docs_new = ['God is love','OpenGL on the GPU is fast'] X_new_counts = count_vect.transform(docs_new) X_new_tfidf = tfidf_transformer.transform(X_new_counts) predicted = clf.predict(X_new_tfidf) for doc,category in zip(docs_new,predicted): print("%r => %s") %(doc,twenty_train.target_names[category]) ```

'God is love' => soc.religion.christian

'OpenGL on the GPU is fast' => comp.graphics

分類效果評價

建立管道

```python from sklearn.pipeline import Pipeline text_clf = Pipeline([('vect',CountVectorizer(stop_words="english",decode_error='ignore')), ('tfidf',TfidfTransformer()), ('clf',MultinomialNB()), ]) text_clf = text_clf.fit(twenty_train.data,twenty_train.target) ```

測試集分類準(zhǔn)確率

```python import numpy as np docs_test = twenty_test.data predicted = text_clf.predict(docs_test) np.mean(predicted == twenty_test.target) ```

0.81691449814126393

使用樸素貝葉斯分類器,得到的測試集分類準(zhǔn)確率為81.7%,效果還不錯!

下面,使用線性核支持向量機看看效果如何。

```python from sklearn.linear_model import SGDClassifier text_clf_2 = Pipeline([('vect',CountVectorizer(stop_words='english',decode_error='ignore')), ('tfidf',TfidfTransformer()), ('clf',SGDClassifier(loss = 'hinge',penalty = 'l2', alpha = 1e-3,n_iter = 5, random_state = 42)), ]) _ = text_clf_2.fit(twenty_train.data,twenty_train.target) predicted = text_clf_2.predict(docs_test) np.mean(predicted == twenty_test.target) ```

0.82355284121083383

支持向量機的分類準(zhǔn)確率有所提升。

`scikit-learn`中提供了更精細(xì)化的評價指標(biāo),如:各類別的精確度,召回率,F(xiàn)值等。

下面,我們來看看更詳細(xì)的指標(biāo)表現(xiàn)如何。

```python from sklearn import metrics print(metrics.classification_report(twenty_test.target,predicted, target_names = twenty_test.target_names)) ```

precision recall f1-score support

alt.atheism 0.71 0.71 0.71 319

comp.graphics 0.81 0.69 0.74 389

comp.os.ms-windows.misc 0.72 0.79 0.75 394

comp.sys.ibm.pc.hardware 0.73 0.66 0.69 392

comp.sys.mac.hardware 0.82 0.83 0.82 385

comp.windows.x 0.86 0.77 0.81 395

misc.forsale 0.80 0.87 0.84 390

rec.autos 0.91 0.90 0.90 396

rec.motorcycles 0.93 0.97 0.95 398

rec.sport.baseball 0.88 0.91 0.90 397

rec.sport.hockey 0.87 0.98 0.92 399

sci.crypt 0.85 0.96 0.90 396

sci.electronics 0.80 0.62 0.70 393

sci.med 0.90 0.87 0.88 396

sci.space 0.84 0.96 0.90 394

soc.religion.christian 0.75 0.93 0.83 398

talk.politics.guns 0.70 0.93 0.80 364

talk.politics.mideast 0.92 0.92 0.92 376

talk.politics.misc 0.89 0.56 0.69 310

talk.religion.misc 0.81 0.39 0.53 251

avg / total 0.83 0.82 0.82 7532

測試集的精確度和召回率的表現(xiàn)均不錯.

下面看看『混淆矩陣』的結(jié)果。

```python metrics.confusion_matrix(twenty_test.target,predicted) ```使用網(wǎng)格搜索進行參數(shù)優(yōu)化

我們使用分類器進行文本分類的過程中,有些參數(shù)需要預(yù)先給定。如前面`TfidfTransformer()`中的`use_idf`;`MultinomialNB()`中的平滑參數(shù)`alpha`;`SGClassifier()`中的懲罰系數(shù)`alpha`。然而,參數(shù)設(shè)置為多少,并不能直接拍腦袋決定。因為參數(shù)的設(shè)置可能會導(dǎo)致結(jié)果天差地別。

為了不淪落為一個『調(diào)參狗』,我們來看看如何使用暴力的『網(wǎng)格搜索算法』讓計算機幫我們進行參數(shù)尋優(yōu)。

```python from sklearn.grid_search import GridSearchCV parameters = { 'vect__ngram_range':[(1,1),(1,2)], 'tfidf__use_idf':(True,False), 'clf__alpha':(1e-2,1e-3) } ```

如果要窮盡所有參數(shù)的組合,那勢必要花費很多時間來等待結(jié)果。有的『土豪』同學(xué)可能會想:我能不能用金錢來換時間?

答案是肯定的。如果你有一臺8核的電腦,那就把所有的核都用上吧!

```python gs_clf = GridSearchCV(text_clf_2,parameters,n_jobs = -1) ``` ```python gs_clf = gs_clf.fit(twenty_train.data,twenty_train.target) ```

設(shè)置`n_jobs = -1`,計算機就會幫你自動檢測并用上你所有的核進行并行計算。

```python best_parameters,score,_ = max(gs_clf.grid_scores_,key = lambda x:x[1]) for param_name in sorted(parameters.keys()): print("%s: %r" %(param_name,best_parameters[param_name])) ```

clf__alpha: 0.01

tfidf__use_idf: True

vect__ngram_range: (1, 1)

```python score ```

0.90516174650875025

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
收藏 人收藏

    評論

    相關(guān)推薦

    Python機器學(xué)習(xí)庫談Scikit-learn技術(shù)

    Scikit-learn API內(nèi)置了各種toy和real-world數(shù)據(jù)集[1]。這些可以便捷地通過行代碼訪問,如果你正在學(xué)習(xí)或只是想快速嘗試新功能,這會非常有用。
    的頭像 發(fā)表于 08-27 17:34 ?3151次閱讀
    Python機器學(xué)習(xí)庫談<b class='flag-5'>Scikit-learn</b>技術(shù)

    什么是機電一體化

    像人類那樣會思考判斷。4) 機電一體化的例子機電一體化產(chǎn)品中定有運動機械,并且采用了電子技術(shù)使運動機械實現(xiàn)柔性和智能
    發(fā)表于 08-29 09:06

    機電一體化系統(tǒng)

    如圖1.1所示,機電一體化系統(tǒng)與靈活性和智能型最強的人體相對應(yīng),由如下5個要素構(gòu)成;1) 機械裝置:能夠實現(xiàn)某種運動的機構(gòu)(相當(dāng)于人類的骨骼)。2) 執(zhí)行裝置:驅(qū)動機械裝置運動的部分(相當(dāng)于人類
    發(fā)表于 08-29 09:11

    一體化模塊貼片機概述

    集成到個機器平臺系統(tǒng)中,實現(xiàn)了電子裝配設(shè)備的一體化臺這樣的設(shè)備就可以完成電子裝配生產(chǎn)線上多個工藝流程,代替了傳統(tǒng)上的組合式生產(chǎn)線。  
    發(fā)表于 09-04 15:43

    如何實現(xiàn)機電一體化設(shè)計?

    用戶總是要求我們提高所設(shè)計的機械的性能,同時減少資金成本。為了達(dá)到這兩個矛盾的目標(biāo),我們將注意力放到在機械設(shè)計方面有巨大潛力的機電一體化上。本文著重展示了使用嵌入式分析工具的現(xiàn)代計算機輔助設(shè)計(CAD)系統(tǒng),告訴大家,如何才能實現(xiàn)機電
    發(fā)表于 08-07 06:48

    通用Python機器學(xué)習(xí)庫scikit-learn

    《利用Python進行數(shù)據(jù)分析》 134 scikit-learn介紹
    發(fā)表于 10-25 07:58

    如何實現(xiàn)一體化芯片-封裝協(xié)同設(shè)計系統(tǒng)的設(shè)計?

    如何實現(xiàn)一體化芯片-封裝協(xié)同設(shè)計系統(tǒng)的設(shè)計?如何優(yōu)化封裝和芯片接口設(shè)計?
    發(fā)表于 04-21 07:01

    一體化伺服電機如何保存當(dāng)前參數(shù)

    本文僅適用于立邁勝PMM系列一體化伺服電機出現(xiàn)的常見問題。如您的伺服電機是其他型號的請謹(jǐn)慎操作。解決方法如下:一體化伺服電機如何保存當(dāng)前參數(shù)?在H1010-01寫0x65766173
    發(fā)表于 06-28 07:18

    一體化步進電機的優(yōu)勢有哪些?為什么選一體化步進電機?

    一體化閉環(huán)步進電機具有哪些優(yōu)點?參數(shù)是什么?
    發(fā)表于 10-13 06:34

    測控一體化閘門系統(tǒng)

    測控一體化閘門系統(tǒng)關(guān)鍵字:測控一體化閘門系統(tǒng) 智能一體化閘門 灌區(qū)水閘自動控制云傳物聯(lián)測控一體化閘門系統(tǒng)集閘門遠(yuǎn)程/自動控制、渠道水位流量
    發(fā)表于 08-25 14:34

    基于Python的scikit-learn編程實例

    scikit-learn 是機器學(xué)習(xí)領(lǐng)域非常熱門的個開源庫,基于Python 語言寫成。可以免費使用。 網(wǎng)址: 上面有很多的教程,編程實例。而且還做了很好的總結(jié),下面這張圖基本概括了傳統(tǒng)機器學(xué)習(xí)
    發(fā)表于 11-15 19:39 ?1690次閱讀

    詳細(xì)解析scikit-learn進行文本分類

    而多類別分類指的是y的可能取值大于2,但是y所屬類別是唯的。它與多標(biāo)簽分類問題是有嚴(yán)格區(qū)別的。所有的scikit-learn分類器都是默認(rèn)支持多類別分類的。但是,當(dāng)你需要自己修改算法的時候,也是可以使用scikit-learn
    的頭像 發(fā)表于 12-27 08:36 ?4753次閱讀
    詳細(xì)解析<b class='flag-5'>scikit-learn</b>進行文本分類

    scikit-learn K近鄰法類庫使用的經(jīng)驗總結(jié)

    本文對scikit-learn中KNN相關(guān)的類庫使用做了個總結(jié),主要關(guān)注于類庫調(diào)參時的個經(jīng)驗總結(jié),且非常詳細(xì)地介紹了類庫的參數(shù)含義。
    的頭像 發(fā)表于 01-13 11:49 ?3253次閱讀
    <b class='flag-5'>scikit-learn</b> K近鄰法類庫使用的經(jīng)驗總結(jié)

    基于Python的scikit-learn實現(xiàn)機器學(xué)習(xí)

    基于Python的scikit-learn實現(xiàn)機器學(xué)習(xí)。
    發(fā)表于 03-26 09:42 ?11次下載
    基于Python的<b class='flag-5'>scikit-learn</b>包<b class='flag-5'>實現(xiàn)</b>機器學(xué)習(xí)

    Scikit-learn機器學(xué)習(xí)庫的概念及工作原理

    作為個適用于 Python 編程語言的機器學(xué)習(xí) (ML) 庫,Scikit-learn 擁有大量算法,可供程序員和數(shù)據(jù)科學(xué)家在機器學(xué)習(xí)模型中輕松部署。
    的頭像 發(fā)表于 09-30 11:00 ?1478次閱讀
    主站蜘蛛池模板: 亚洲综合五月天欧美| 一级录像| 欧美日韩一区在线观看| 手机免费在线视频| 午夜网站在线| 男人资源网| 1024你懂的国产日韩欧美| 视频在线观看免费网址| 91大神精品| 美女视频一区二区三区在线| 国产成人综合日韩精品婷婷九月| 永久网站色视频在线观看免费| 亚洲精品色一区色二区色三区| 四虎影院com| 女人被男人免费播放网站| 国产精品永久免费| 天天视频在线观看免费| 国产黄色一级网站| 亚洲a区视频| 亚洲插插插| 欧美三级大片在线观看| 国产久爱青草视频在线观看| 天天综合天天看夜夜添狠狠玩| 九色亚洲| 亚洲精品播放| 四虎国产精品影库永久免费| 免费看 s色| 伊人网综合在线视频| 国产午夜剧场| 久久国产午夜精品理论篇小说| 成人午夜影院在线观看| 午夜性爽快| 婷婷久操| 激情五月婷婷小说| 天天爽夜夜爽| h视频免费观看| 性欧美高清强烈性视频| 久久艹影院| 人人福利| 欧美福利一区| 日本黄色a级|