日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【数据竞赛】Kaggle实战之特征工程篇-20大文本特征(下)

發(fā)布時間:2025/3/12 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数据竞赛】Kaggle实战之特征工程篇-20大文本特征(下) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:塵沙杰少、櫻落、新峰、DOTA、謝嘉嘉

特征工程--文本特征下半篇!

前 言

這是一個系列篇,后續(xù)我們會按照我們第一章中的框架進行更新,因為大家平時都較忙,不會定期更新,如有興趣歡迎長期關(guān)注我們的公眾號,如有任何建議可以在評論區(qū)留言,該系列以往的經(jīng)典內(nèi)容可參考下面的篇章。

1. kaggle競賽寶典-競賽框架篇!

2.1?賽題理解,分析,規(guī)劃之賽題理解與分析!

2.2??kaggle競賽寶典-回歸相關(guān)指標優(yōu)化!

2.3??kaggle競賽寶典-二分類相關(guān)指標優(yōu)化!

2.4??kaggle競賽寶典-多分類相關(guān)指標優(yōu)化!

2.5?數(shù)據(jù)競賽規(guī)劃!

3.1?數(shù)據(jù)探索分析-全局數(shù)據(jù)探索分析!

3.2?數(shù)據(jù)探索分析-單變量數(shù)據(jù)分析!

3.3 數(shù)據(jù)探索分析-交叉變量分析篇!

3.4?訓(xùn)練集測試集分布不一致性探索!

4.1?kaggle競賽寶典-樣本篩選篇!

4.2?kaggle競賽寶典-樣本組織篇!

5. 驗證策略設(shè)計!

6.1. 模型理解、選擇--GBDT!

6.2.模型理解、選擇--XGBoost!

6.3.模型理解、選擇--LightGBM!

6.4.模型理解、選擇--CatBoost!

7.1 特征工程--為什么要做特征工程!

7.2?特征工程-無序單無序類別特征特征工程!

7.3 特征工程-有序類別變量&單數(shù)值變量特征工程!

7.4 特征工程-單時間變量特征工程!

7.5 特征工程-文本特征工程上篇!

文本特征-下篇

針對梯度提升樹模型對文本特征進行特征工程,我們需要充分挖掘Label編碼丟失的信息,例如上面的名字特征,內(nèi)部存在非常強的規(guī)律,Mr等信息,這些信息反映了性別相關(guān)的信息,如果直接進行Label編碼就會丟失此類信息,所以我們可以通過文本技巧對其進行挖掘。在本文中,我們對現(xiàn)在常用的文本特征進行匯總。在上篇中介紹過的此處不在贅述。

1.詞匯屬性特征

每個詞都有其所屬的屬性,例如是名詞,動詞,還是形容詞等等。詞匯屬性特征很多時候能幫助模型帶來效果上的微弱提升,可以作為一類補充信息。

2.文本向量特征

TDIDF特征可以緩解詞頻特征的高頻詞匯特征帶來的問題,同時通過N-Gram的策略還可以間接捕捉文本中的詞的關(guān)系,但是這些信息的捕捉還是較差的,而且N-Gram的策略還會使得字典過大,帶來存儲的問題。但是詞向量特征卻可以很好地緩解這兩個問題。

詞嵌入模型通過建立所選詞與相鄰前后詞之間的概率分布,將詞映射到某個維度的向量。這樣我們就僅僅只需要記錄每個詞對應(yīng)的向量,而且在實踐中我們發(fā)現(xiàn)基于詞向量的特征往往能取得更好的效果,這也從側(cè)面說明了詞向量的形式可以更好地捕捉詞與詞之間的關(guān)系。

目前可以通過使用Gensim來抽取詞向量。因為我們抽取的是基于詞的向量,而不同文本的詞的個數(shù)是不一樣的,所以最后還需要通過某種轉(zhuǎn)化將我們的的文本特征轉(zhuǎn)化為相同維度的特征。最為常見的就是下面兩種策略:

1. 計算統(tǒng)計特征,例如均值、中位數(shù)、方差等等;?

2. 先將文本長度進行截斷,缺失的補0,然后進行PCA,TSNE等轉(zhuǎn)化;

目前可以產(chǎn)出詞向量的策略非常多,例如Word2Vec,Glove等等,還有許多最新預(yù)訓(xùn)練好的包都可以直接拿過來使用。

import?gensim.downloader?as?gensim_api glove_model?=?gensim_api.load("glove-wiki-gigaword-300")? word?=?"love" glove_model[word]

3.HashVector

不管是CounterVector,TfidfVectorizer還是Word2Vector等詞向量的方式抽取的特征我們都需要存儲一個映射表,這會帶來非常大的內(nèi)存壓力,但我們?nèi)匀恍枰獙⑽臋n編碼為向量,這個時候我們就需要用到HashVector,HashingVectorizer不存儲結(jié)果詞匯表,該方法使用單向哈希方法將單詞轉(zhuǎn)化成整數(shù),因而我們不需要詞匯表,可以選擇任意長的固定長度向量,這對于大型數(shù)據(jù)集非常有效。缺點是哈希量化是單向的,因此無法將編碼轉(zhuǎn)換回單詞,在很多有監(jiān)督學(xué)習(xí)中是不影響的。

因為我們使用的是HashVector就自然會存在散列沖突的問題(如果矩陣大小太小,則必然會發(fā)生這種情況),在計算資源達到最大值的情況下,HashVector是非常好的特征。

from?sklearn.feature_extraction.text?import?HashingVectorizer text?=?["The?quick?brown?fox?jumped?over?the?lazy?dog."] vectorizer?=?HashingVectorizer(n_features=20) vector?=?vectorizer.transform(text) print(vector.shape) print(vector.toarray()) (1, 20) [[ 0. 0. 0. 0. 0. 0.333333330. -0.33333333 0.33333333 0. 0. 0.333333330. 0. 0. -0.33333333 0. 0.-0.66666667 0. ]]

4.文本語言信息

在很多問題中,并不是所有的文本都是同一種語言,這個時候我們需要對不同的文本進行分類,判斷其是哪一種類型的語言。

import?pandas?as?pdimport?langdetect?df?=?pd.DataFrame() df['text']?=?['I?love?it.',?'我喜歡你。',?'I?think?you?are?great!',?'OK!',?'太棒了。',?'No?pro.'] df['lang']?=?df["text"].apply(lambda?x:?langdetect.detect(x)?if?x.strip()?!=?""?else?"") df
textlang012345
I love it.sl
我喜歡你。zh-cn
I think you are great!en
OK!en
太棒了。zh-cn
No pro.pt


5.語意特征

情感分析是通過數(shù)字或類來表達文本數(shù)據(jù)的主觀情感,在非常多的問題中都至關(guān)重要。目前情感分析是自然語言處理中最困難的任務(wù)之一,需要處理自然語言的歧義等問題,但是如果我們能很好地挖掘出文本的情感,那么對于我們模型的幫助是非常巨大的。

但是一個好的語言模型的訓(xùn)練是非常耗費時間的,如果沒有足夠的時間或數(shù)據(jù)時,我們可以使用預(yù)先訓(xùn)練好的模型,比如Textblob和Vader。Textblob建立在NLTK之上,是最流行的語言之一,它可以給單詞分配極性,并將整個文本的情感作為一個平均值進行估計。Vader是一個基于規(guī)則的模型,目前在社交媒體的數(shù)據(jù)上使用較多。

import?pandas?as?pd from?textblob?import?TextBlob df?=?pd.DataFrame() df['text']?=?['I?love?it.',?'I?hate?you.',?'I?think?you?are?great!',?'She?is?beautiful.',?'Good!',?'No?problem.'] df["sentiment"]?=?df['text'].apply(lambda?x:??TextBlob(x).sentiment.polarity) df.head()
textsentiment01234
I love it.0.500
I hate you.-0.800
I think you are great!1.000
She is beautiful.0.850
Good!0.875
  • 從上面的特征中,我們發(fā)現(xiàn)情感的特征還是相對靠譜的。

6.特殊詞匯特征

標點符號能從側(cè)面反映文本的情感強烈程度等信息,在情感分類,文本分類中有很重要的作用,當然與此同時,特殊詞匯的特征特征則更為重要。特殊詞匯依據(jù)問題的不同,會有非常大的不同,我們舉幾個簡單的例子:

  • 文本情感分類問題

我們可以選擇直接分類別(每一類情感表示一類)統(tǒng)計每個類別中詞匯的出現(xiàn)次數(shù)。

  • 代碼病毒檢測問題

代碼的關(guān)鍵詞信息都尤為重要,例如截圖,聯(lián)網(wǎng),發(fā)送等特殊詞匯會為我們判斷該代碼文件是否含有病毒提供重要的依據(jù)。

7.NER特征

命名實體識別(Named entity recognition,NER)是用預(yù)定義的類別(如人名、地點、組織等)標記非結(jié)構(gòu)化文本中提到的命名實體的過程。這些重要的命名實體在非常多的問題中都很有用。例如判斷某用戶點擊某廣告的概率等,可以通過NER識別出廣告中的代言人,依據(jù)代言人與用戶的喜好來判定用戶點擊某條廣告的概率。目前使用較多的NER工具包是SpaCy,關(guān)于NER目前能處理多少不同的命名實體,有興趣的朋友可以看一下Spacy工具包

除了可與直接抽取我們想要的NER特征,SpaCy還可以對其進行標亮,如下所示。

import?spacy import?pandas?as?pd #?!pip?install?zh_core_web_sm-3.0.0-py3-none-any.whl ner?=?spacy.load("zh_core_web_sm") df?=?pd.DataFrame() df['txt']?=?['','我喜歡四川。','成都的女孩喜歡吃辣。'] df["tags"]?=?df["txt"].apply(lambda?x:?[(tag.text,?tag.label_)???for?tag?in?ner(x).ents]?) df?
txttags012
在無錫車站,我遇見了來自南京的你。[(無錫車站, FAC), (南京, GPE)]
我喜歡四川。[(四川, GPE)]
成都的女孩喜歡吃辣。[(成都, GPE)]
txt?=?'在無錫車站,我遇見了來自南京的你。但沒想到你那么喜歡吃四川的火鍋。' doc?=?ner(txt) ##?display?result spacy.displacy.render(doc,?style="ent")

在無錫車站 FAC,我遇見了來自南京 GPE的你。但沒想到你那么喜歡吃四川 GPE的火鍋。

8.K近鄰特征

除了LDA主題模型,我們基于向量做的最多的衍生特征就是相似度特征。我們找到距離每個文本最近的N個文本,并將最近的N個文本對應(yīng)的ID以及其與當前文本的距離作為我們新的特征。

距離的計算方式可以是歐幾里得,cosine等等,依據(jù)距離的不同,文本相似度特征可以有非常多。

from?sklearn.metrics.pairwise?import?cosine_similarity similarity_matrix?=?cosine_similarity(tfidf_matrix) similarity_matrix array([[1. , 0.36651513, 0.52305744, 0.13448867],[0.36651513, 1. , 0.72875508, 0.54139736],[0.52305744, 0.72875508, 1. , 0.43661098],[0.13448867, 0.54139736, 0.43661098, 1. ]])

9.聚類特征

和K近鄰特征經(jīng)常一起使用的就是聚類特征。同樣地,因為聚類特征的方式是非常多的,最常見的就是Kmeans等等,此處我們列舉常見的兩種聚類特征。

  • Kmeans聚類

from?sklearn.cluster?import?KMeans km?=?KMeans(n_clusters=2) km.fit_predict(tfidf_matrix) array([0, 1, 1, 1], dtype=int32)
  • hierarchy聚類

from?scipy.cluster.hierarchy?import?dendrogram,?linkageZ?=?linkage(tfidf_matrix,?'ward') pd.DataFrame(Z,?columns=['Document\Cluster?1',?'Document\Cluster?2',?'Distance',?'Cluster?Size'],?dtype='object')
Document\Cluster 1Document\Cluster 2DistanceCluster Size012
120.7365392
341.087123
051.242924
import?matplotlib.pyplot?as?plt plt.figure(figsize=(8,?3)) plt.title('Hierarchical?Clustering?Dendrogram') plt.xlabel('Data?point') plt.ylabel('Distance') dendrogram(Z) plt.axhline(y=1.0,?c='k',?ls='--',?lw=0.5) <matplotlib.lines.Line2D at 0x7ff7d99f0580>from?scipy.cluster.hierarchy?import?fcluster max_dist?=?1.0cluster_labels?=?fcluster(Z,?max_dist,?criterion='distance') cluster_labels?=?pd.DataFrame(cluster_labels,?columns=['ClusterLabel']) cluster_labels
ClusterLabel0123
3
1
1
2


10.小結(jié)

目前文本相關(guān)的問題都是以DeepLearning為主的方案,但上述的許多特征都是非常重要的,可以作為神經(jīng)網(wǎng)絡(luò)的Dense側(cè)特征加入模型訓(xùn)練或者直接抽取放入梯度提升樹模型進行訓(xùn)練,往往都可以帶來不錯的提升,因為本系列我們重點是梯度提升樹模型的建模,關(guān)于DeepLearning的很多訓(xùn)練等策略有興趣的可以閱讀相關(guān)的文章自行研究。

參考文獻

  • https://blog.socratesk.com/blog/2018/06/17/featuren-engineering-and-extraction

  • https://datascience.stackexchange.com/questions/10509/how-to-deal-with-categorical-feature-of-very-high-cardinality

  • KaggleDays SF: 2. Amazon - Unsupervised encoding

  • Mean (likelihood) encodings: a comprehensive study

  • http://blog.kaggle.com/2015/06/22/profiling-top-kagglers-owen-zhang-currently-1-in-the-world/

  • Feature Engineering Techniques

  • How the Magic Works

  • Why One-Hot Encode Data in Machine Learning?

  • Label Encoding in Python Explained

  • Why does frequency encoding work?

  • Encoding categorical variables using likelihood estimation

  • Mean (likelihood) encoding for categorical variables with high cardinality and feature interactions: a comprehensive study with Python

  • Category Encoders

  • Leave One Out Encoding for Categorical Feature Variables on Spark

  • https://github.com/pourya-ir/Medium/tree/master/K-fold-target-enc

  • How to deal with Features having high cardinality

  • https://github.com/scikit-learn-contrib/category_encoders

  • Handling Categorical Data in Python

  • Here’s All you Need to Know About Encoding Categorical Data (with Python code)

  • Encodings for Ordered Data

  • Feature Engineering, Feature Extraction, and Feature Selection

  • Detailed Text Based Feature Engineering

  • Extensive Text Data Feature Engineering

  • 了解一下Sklearn中的文本特征提取

  • Traditional Methods for Text Data

  • Feature Extraction from Text (USING PYTHON)

  • https://spacy.io/usage/linguistic-features

  • https://github.com/RaRe-Technologies/gensim-data

  • Text Analysis & Feature Engineering with NLP

  • Foundations of AI & ML

  • Feature Engineering Methods for Text Data

  • HashingVectorizer vs. CountVectorizer

  • 使用Scikit-Learn提取文本特征

  • 往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機器學(xué)習(xí)在線手冊深度學(xué)習(xí)筆記專輯《統(tǒng)計學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯溫州大學(xué)《機器學(xué)習(xí)課程》視頻 本站qq群851320808,加入微信群請掃碼:

    總結(jié)

    以上是生活随笔為你收集整理的【数据竞赛】Kaggle实战之特征工程篇-20大文本特征(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。