最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python文本特征抽取與向量化算法學(xué)習(xí)

 更新時(shí)間:2017年12月22日 11:19:26   作者:lsldd  
這篇文章主要為大家詳細(xì)介紹了Python文本特征抽取與向量化算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家分享了Python文本特征抽取與向量化的具體代碼,供大家參考,具體內(nèi)容如下

假設(shè)我們剛看完諾蘭的大片《星際穿越》,設(shè)想如何讓機(jī)器來(lái)自動(dòng)分析各位觀眾對(duì)電影的評(píng)價(jià)到底是“贊”(positive)還是“踩”(negative)呢?

這類(lèi)問(wèn)題就屬于情感分析問(wèn)題。這類(lèi)問(wèn)題處理的第一步,就是將文本轉(zhuǎn)換為特征。

因此,這章我們只學(xué)習(xí)第一步,如何從文本中抽取特征,并將其向量化。

由于中文的處理涉及到分詞問(wèn)題,本文用一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明如何使用Python的機(jī)器學(xué)習(xí)庫(kù),對(duì)英文進(jìn)行特征提取。

1、數(shù)據(jù)準(zhǔn)備

Python的sklearn.datasets支持從目錄讀取所有分類(lèi)好的文本。不過(guò)目錄必須按照一個(gè)文件夾一個(gè)標(biāo)簽名的規(guī)則放好。比如本文使用的數(shù)據(jù)集共有2個(gè)標(biāo)簽,一個(gè)為“net”,一個(gè)為“pos”,每個(gè)目錄下面有6個(gè)文本文件。目錄如下所示:

neg
    1.txt
    2.txt
    ......
pos
    1.txt
    2.txt
    ....

12個(gè)文件的內(nèi)容匯總起來(lái)如下所示:

neg: 
  shit. 
  waste my money. 
  waste of money. 
  sb movie. 
  waste of time. 
  a shit movie. 
pos: 
  nb! nb movie! 
  nb! 
  worth my money. 
  I love this movie! 
  a nb movie. 
  worth it! 

2、文本特征

如何從這些英文中抽取情感態(tài)度而進(jìn)行分類(lèi)呢?

最直觀的做法就是抽取單詞。通常認(rèn)為,很多關(guān)鍵詞能夠反映說(shuō)話者的態(tài)度。比如上面這個(gè)簡(jiǎn)單的數(shù)據(jù)集,很容易發(fā)現(xiàn),凡是說(shuō)了“shit”的,就一定屬于neg類(lèi)。

當(dāng)然,上面數(shù)據(jù)集是為了方便描述而簡(jiǎn)單設(shè)計(jì)的?,F(xiàn)實(shí)中一個(gè)詞經(jīng)常會(huì)有穆棱兩可的態(tài)度。但是仍然有理由相信,某個(gè)單詞在neg類(lèi)中出現(xiàn)的越多,那么他表示neg態(tài)度的概率越大。
同樣我們注意到有些單詞對(duì)情感分類(lèi)是毫無(wú)意義的。比如上述數(shù)據(jù)中的“of”,“I”之類(lèi)的單詞。這類(lèi)詞有個(gè)名字,叫“Stop_Word”(停用詞)。這類(lèi)詞是可以完全忽略掉不做統(tǒng)計(jì)的。顯然忽略掉這些詞,詞頻記錄的存儲(chǔ)空間能夠得到優(yōu)化,而且構(gòu)建速度也更快。
把每個(gè)單詞的詞頻作為重要的特征也存在一個(gè)問(wèn)題。比如上述數(shù)據(jù)中的”movie“,在12個(gè)樣本中出現(xiàn)了5次,但是出現(xiàn)正反兩邊次數(shù)差不多,沒(méi)有什么區(qū)分度。而”worth“出現(xiàn)了2次,但卻只出現(xiàn)在pos類(lèi)中,顯然更具有強(qiáng)烈的剛晴色彩,即區(qū)分度很高。

因此,我們需要引入TF-IDF(Term Frequency-Inverse Document Frequency,詞頻和逆向文件頻率)對(duì)每個(gè)單詞做進(jìn)一步考量。

TF(詞頻)的計(jì)算很簡(jiǎn)單,就是針對(duì)一個(gè)文件t,某個(gè)單詞Nt 出現(xiàn)在該文檔中的頻率。比如文檔“I love this movie”,單詞“l(fā)ove”的TF為1/4。如果去掉停用詞“I"和”it“,則為1/2。

IDF(逆向文件頻率)的意義是,對(duì)于某個(gè)單詞t,凡是出現(xiàn)了該單詞的文檔數(shù)Dt,占了全部測(cè)試文檔D的比例,再求自然對(duì)數(shù)。
比如單詞“movie“一共出現(xiàn)了5次,而文檔總數(shù)為12,因此IDF為ln(5/12)。
很顯然,IDF是為了凸顯那種出現(xiàn)的少,但是占有強(qiáng)烈感情色彩的詞語(yǔ)。比如“movie”這樣的詞的IDF=ln(12/5)=0.88,遠(yuǎn)小于“l(fā)ove”的IDF=ln(12/1)=2.48。

TF-IDF就是把二者簡(jiǎn)單的乘在一起即可。這樣,求出每個(gè)文檔中,每個(gè)單詞的TF-IDF,就是我們提取得到的文本特征值。

3、向量化

有了上述基礎(chǔ),就能夠?qū)⑽臋n向量化了。我們先看代碼,再來(lái)分析向量化的意義:

# -*- coding: utf-8 -*- 
import scipy as sp 
import numpy as np 
from sklearn.datasets import load_files 
from sklearn.cross_validation import train_test_split 
from sklearn.feature_extraction.text import TfidfVectorizer 
 
'''''加載數(shù)據(jù)集,切分?jǐn)?shù)據(jù)集80%訓(xùn)練,20%測(cè)試''' 
movie_reviews = load_files('endata')  
doc_terms_train, doc_terms_test, y_train, y_test\ 
  = train_test_split(movie_reviews.data, movie_reviews.target, test_size = 0.3) 
   
'''''BOOL型特征下的向量空間模型,注意,測(cè)試樣本調(diào)用的是transform接口''' 
count_vec = TfidfVectorizer(binary = False, decode_error = 'ignore',\ 
              stop_words = 'english') 
x_train = count_vec.fit_transform(doc_terms_train) 
x_test = count_vec.transform(doc_terms_test) 
x    = count_vec.transform(movie_reviews.data) 
y    = movie_reviews.target 
print(doc_terms_train) 
print(count_vec.get_feature_names()) 
print(x_train.toarray()) 
print(movie_reviews.target) 

運(yùn)行結(jié)果如下:
[b'waste of time.', b'a shit movie.', b'a nb movie.', b'I love this movie!', b'shit.', b'worth my money.', b'sb movie.', b'worth it!']
['love', 'money', 'movie', 'nb', 'sb', 'shit', 'time', 'waste', 'worth']
[[ 0.          0.          0.          0.          0.          0.   0.70710678  0.70710678  0.        ]
 [ 0.          0.          0.60335753  0.          0.          0.79747081   0.          0.          0.        ]
 [ 0.          0.          0.53550237  0.84453372  0.          0.          0.   0.          0.        ]
 [ 0.84453372  0.          0.53550237  0.          0.          0.          0.   0.          0.        ]
 [ 0.          0.          0.          0.          0.          1.          0.   0.          0.        ]
 [ 0.          0.76642984  0.          0.          0.          0.          0.   0.          0.64232803]
 [ 0.          0.          0.53550237  0.          0.84453372  0.          0.   0.          0.        ]
 [ 0.          0.          0.          0.          0.          0.          0.   0.          1.        ]]
[1 1 0 1 0 1 0 1 1 0 0 0]

python輸出的比較混亂。我這里做了一個(gè)表格如下:

從上表可以發(fā)現(xiàn)如下幾點(diǎn):

1、停用詞的過(guò)濾。

初始化count_vec的時(shí)候,我們?cè)赾ount_vec構(gòu)造時(shí)傳遞了stop_words = 'english',表示使用默認(rèn)的英文停用詞??梢允褂胏ount_vec.get_stop_words()查看TfidfVectorizer內(nèi)置的所有停用詞。當(dāng)然,在這里可以傳遞你自己的停用詞list(比如這里的“movie”)

2、TF-IDF的計(jì)算。

這里詞頻的計(jì)算使用的是sklearn的TfidfVectorizer。這個(gè)類(lèi)繼承于CountVectorizer,在后者基本的詞頻統(tǒng)計(jì)基礎(chǔ)上增加了如TF-IDF之類(lèi)的功能。
我們會(huì)發(fā)現(xiàn)這里計(jì)算的結(jié)果跟我們之前計(jì)算不太一樣。因?yàn)檫@里count_vec構(gòu)造時(shí)默認(rèn)傳遞了max_df=1,因此TF-IDF都做了規(guī)格化處理,以便將所有值約束在[0,1]之間。

3、count_vec.fit_transform的結(jié)果是一個(gè)巨大的矩陣。我們可以看到上表中有大量的0,因此sklearn在內(nèi)部實(shí)現(xiàn)上使用了稀疏矩陣。本例子數(shù)據(jù)較小。如果讀者有興趣,可以試試機(jī)器學(xué)習(xí)科研工作者使用的真實(shí)數(shù)據(jù),來(lái)自康奈爾大學(xué):http://www.cs.cornell.edu/people/pabo/movie-review-data/。這個(gè)網(wǎng)站提供了很多數(shù)據(jù)集,其中有幾個(gè)2M左右的數(shù)據(jù)庫(kù),正反例700個(gè)左右。這樣的數(shù)據(jù)規(guī)模也不算大,1分鐘內(nèi)還是可以跑完的,建議大家試一試。不過(guò)要注意這些數(shù)據(jù)集可能存在非法字符問(wèn)題。所以在構(gòu)造count_vec時(shí),傳入了decode_error = 'ignore',以忽略這些非法字符。

上表的結(jié)果,就是訓(xùn)練8個(gè)樣本的8個(gè)特征的一個(gè)結(jié)果。這個(gè)結(jié)果就可以使用各種分類(lèi)算法進(jìn)行分類(lèi)了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Django路由層如何獲取正確的url

    Django路由層如何獲取正確的url

    本文介紹路由層是如何進(jìn)行路由匹配的,以diango1.x版本為例,文中通過(guò)示例代碼介紹的非常詳細(xì),文中通過(guò)示例代碼介紹的非常詳細(xì),
    2021-07-07
  • 自動(dòng)化測(cè)試時(shí)基于Python常用的幾個(gè)加密算法總結(jié)

    自動(dòng)化測(cè)試時(shí)基于Python常用的幾個(gè)加密算法總結(jié)

    這幾天做自動(dòng)化測(cè)試,遇到一個(gè)問(wèn)題,那就是接口的請(qǐng)求的密碼是加密的,產(chǎn)品的要求是不能使用使用其他特殊手段,他給提供加密算法,需要在接口請(qǐng)求的時(shí)候,使用加密算法處理后的數(shù)據(jù)傳參,本文主要是整理了幾個(gè)加密算法,以便后續(xù)測(cè)試使用,需要的朋友可以參考下
    2023-12-12
  • Python基于均值漂移算法和分水嶺算法實(shí)現(xiàn)圖像分割

    Python基于均值漂移算法和分水嶺算法實(shí)現(xiàn)圖像分割

    圖像分割是將圖像分成若干具有獨(dú)特性質(zhì)的區(qū)域并提取感興趣目標(biāo)的技術(shù)和過(guò)程。這篇文章將詳細(xì)講解基于均值漂移算法和分水嶺算法的圖像分割,需要的可以參考一下
    2023-01-01
  • Python多線程以及多線程中join()的使用方法示例

    Python多線程以及多線程中join()的使用方法示例

    join()是線程類(lèi)Thread的方法,官方的說(shuō)明是:等待這個(gè)線程結(jié)束,也就是說(shuō)當(dāng)前線程等待這個(gè)線程結(jié)束后再繼續(xù)執(zhí)行,這篇文章主要給大家介紹了關(guān)于Python多線程以及多線程中join()使用的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • Python中列表list常用方法總結(jié)

    Python中列表list常用方法總結(jié)

    在?Python?中,列表(List)是一種有序的數(shù)據(jù)集合,可以存儲(chǔ)任意類(lèi)型的數(shù)據(jù)。本文主要幫大家總結(jié)了一下列表list的常用方法,需要的可以參考一下
    2023-05-05
  • python實(shí)現(xiàn)簡(jiǎn)易SSL的項(xiàng)目實(shí)踐

    python實(shí)現(xiàn)簡(jiǎn)易SSL的項(xiàng)目實(shí)踐

    本文主要介紹了python實(shí)現(xiàn)簡(jiǎn)易SSL的項(xiàng)目實(shí)踐,包括CA.py、server.py和client.py三個(gè)模塊,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • Python無(wú)權(quán)點(diǎn)文件轉(zhuǎn)化成鄰接矩陣方式

    Python無(wú)權(quán)點(diǎn)文件轉(zhuǎn)化成鄰接矩陣方式

    這篇文章主要介紹了Python無(wú)權(quán)點(diǎn)文件轉(zhuǎn)化成鄰接矩陣方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • matplotlib實(shí)現(xiàn)區(qū)域顏色填充

    matplotlib實(shí)現(xiàn)區(qū)域顏色填充

    這篇文章主要為大家詳細(xì)介紹了matplotlib實(shí)現(xiàn)區(qū)域顏色填充,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • Django-Xadmin后臺(tái)首頁(yè)添加小組件報(bào)錯(cuò)的解決方案

    Django-Xadmin后臺(tái)首頁(yè)添加小組件報(bào)錯(cuò)的解決方案

    這篇文章主要介紹了Django-Xadmin后臺(tái)首頁(yè)添加小組件報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 簡(jiǎn)單實(shí)現(xiàn)python爬蟲(chóng)功能

    簡(jiǎn)單實(shí)現(xiàn)python爬蟲(chóng)功能

    這篇文章主要介紹了python實(shí)現(xiàn)簡(jiǎn)單爬蟲(chóng)功能的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2015-12-12

最新評(píng)論

建瓯市| 青神县| 固始县| 通化市| 柳州市| 宁河县| 建湖县| 大丰市| 磐石市| 穆棱市| 麦盖提县| 海城市| 伊春市| 鄂尔多斯市| 永修县| 秭归县| 茌平县| 荣昌县| 高密市| 天台县| 七台河市| 西乌| 色达县| 宜阳县| 淮滨县| 鄱阳县| 和硕县| 平武县| 合江县| 色达县| 穆棱市| 南木林县| 岳普湖县| 汉寿县| 南皮县| 安化县| 平山县| 赣州市| 拉萨市| 雷州市| 灵台县|