海爾集團電商網(wǎng)站建設百度網(wǎng)頁版進入
決策樹算法
特征工程-特征提取
特征提取就是將任意數(shù)據(jù)轉(zhuǎn)換為可用于機器學習的數(shù)字特征。計算機無法直接識別字符串,將字符串轉(zhuǎn)換為機器可以讀懂的數(shù)字特征,才能讓計算機理解該字符串(特征)表達的意義。
主要分為:字典特征提取(特征離散化)、文本特征提取(文章中特征詞匯出現(xiàn)的頻次)。
字典特征提取
對類別數(shù)據(jù)進行轉(zhuǎn)換。
計算機不能夠識別直接傳入的城市、溫度數(shù)據(jù),需要轉(zhuǎn)換為0,1的編碼才能夠被計算機所識別。
用代碼實現(xiàn)就為:
字典特征提取API
sklearn.feature_extraction.DictVectorizer(sparse=Ture,...)
DictVectorizer.fit_transform(X),X:字典或者包含字典的迭代器返回值,返回sparse矩陣
DictVectorizer.get_feature_names()返回類別名稱
當數(shù)據(jù)量比較大的時候,使用sparse矩陣能更好的顯示特征數(shù)據(jù),更加的直觀,沒有顯示0數(shù)據(jù),更加節(jié)省內(nèi)存。
文本特征提取
對文本數(shù)據(jù)進行特征值化,一篇文章中每個詞語出現(xiàn)的頻次。
文本特征提取API
sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
返回詞頻矩陣。
CountVectorizer.fit_transform(X)
X:文本或者包含文本字符串的可迭代對象
返回值:返回sparse矩陣
CountVectorizer.get_feature_names()返回值:單詞列表
英文文本特征提取實現(xiàn)
需求:體現(xiàn)以下段落的詞匯出現(xiàn)的頻次
[“Life is a never - ending road”,“I walk,walk,keep walking.”]
注意:
1.文本特征提取沒有sparse參數(shù),只能以默認的sparse矩陣接收
2.單個的字母,如I,a都不會統(tǒng)計
3.通過stop_words指定停用詞
中文文本特征提取實現(xiàn)
需求:體現(xiàn)以下段落的詞匯出現(xiàn)的頻次
data = [‘這一次相遇’,‘美得徹骨,美得震顫,美得孤絕,美得驚艷。’]
需求:體現(xiàn)以下文本的詞匯出現(xiàn)的頻次
把文章中的詞匯統(tǒng)一提取出來,去掉重復值后放到一個列表里,矩陣里顯示的是每個詞匯在每一行中出現(xiàn)的次數(shù)。根據(jù)詞匯出現(xiàn)的多少可以把 文章歸納為跟詞匯相關的文章。
Tf-idf文本特征提取
TF-IDF的主要思想是:如果某個詞語或短語在一篇文章中出現(xiàn)的概率高,并且在其他文章中很少出現(xiàn),則認為此詞或短語具有很好的類別區(qū)分能力,適合用來分類。
TF-IDF的作用:用于評估一字詞對于一個文件集或一個語料庫中的其中一份文件的重要程度。
Tf-idf文本特征提取公式: t f i d f i , j = t f i , j ? i d f i tfidf_{i,j}=tf_{i,j}*idf_i tfidfi,j?=tfi,j??idfi?
詞頻(term frequency ,tf):指的是某一個給定的詞語在該文件中出現(xiàn)的頻率
逆向文檔頻率(inverse document frequency ,idf):是一個詞語普遍重要性的度量。某一個特定詞語的idf,可以由總文件數(shù)目除以包含該詞語之文件的數(shù)目,再將得到的商取以10為底的對數(shù)得到。
比如一篇文章由1000個字,而房地產(chǎn)出現(xiàn)了500次,房地產(chǎn)在該文章中出現(xiàn)的頻率tf為:500/1000=0.5;房地產(chǎn)在1000份文件中出現(xiàn)過,文件的總數(shù)量為1000000,idf: l o g 1000000 / 1000 = 3 log1000000/1000=3 log1000000/1000=3;tf-idf就為0.5*3=1.5。
不單單看某個詞匯在某一篇文章中出現(xiàn)的次數(shù)(頻率),還需要看它在整個文件集中出現(xiàn)的次數(shù)。
Tf-idf文本特征提取api
sklearn.feature_extraction.text.TfidfVectorizer
得到的是計算之后的tfidf的結(jié)果,沒有文件集就是以行來進行分割的,以列表作為文件集,把每一行作為一個文件來進行處理。通過判斷tfidf的大小來將某個詞匯作為分割的重要詞匯。
決策樹算法API
分類API
sklearn.tree.DecisionTreeClassifier 決策樹的分類算法器- criterion:設置樹的類型- entropy:基于信息熵,也就是ID3算法,實際結(jié)果與C4.5相差不大- gini:默認參數(shù),相當于基尼系數(shù)。CART算法是基于基尼系數(shù)做屬性劃分的,
所以criterion=gini時,實際上執(zhí)行的是CART算法。- splitter:在構(gòu)造樹時,選擇屬性特征的原則,可以是best或random。默認是best,- best代表在所有的特征中選擇最好的,random代表在部分特征中選擇最好的。- max_depth:決策樹的最大深度,可以控制決策樹的深度來防止決策樹過擬合。- min_samples_split:當節(jié)點的樣本數(shù)小于min_samples_split時,不再繼續(xù)分裂,默認值為2- min_samples_leaf:葉子節(jié)點需要的最小樣本數(shù)。如果某葉子節(jié)點的數(shù)目小于這個閾值,則會和
兄弟節(jié)點一起被剪枝??梢詾?span id="ieo6y2aa" class="token builtin">int、float類型。- min_leaf_nodes:最大葉子節(jié)點數(shù)。int類型,默認情況下無需設置,特征不多時,無需設置。
特征比較多時,可以通過該屬性防止過擬合。
案例:泰坦尼克號乘客生存預測
需求:讀取以下數(shù)據(jù),預測生存率
train.csv 是訓練數(shù)據(jù)集,包含特征信息和存活與否的標簽;
test.csv 是測試數(shù)據(jù)集,只包含特征信息。
PassengerId:乘客編號;Survived:是否幸存;Pclass:船票等級;Name:姓名;Sex:性別;Age:年齡;
SibSp:親戚數(shù)量(兄妹 配偶);Parch:親戚數(shù)量(父母 子女);Ticket:船票號碼;Fare:船票價格;Cabin:船艙;
通過對字段的分析進行處理,注意純數(shù)字類型可以以均值進行替換,字符串類型的缺失值太大就直接刪掉,缺失值比較少的話就用占比比較多的來填充,特征選擇盡量與標簽有關系的特征,將特征中的文本轉(zhuǎn)換為對應的數(shù)值,最終進行訓練模型,然后進行K折交叉驗證。
決策樹可視化
安裝graphviz工具,下載地址:http://www.graphviz.org/download/
將graphviz添加到環(huán)境變量PATH中,然后通過pip install graphviz 安裝graphviz庫
生成的圖片比較大,可以保存為pdf文件,效果如下
決策樹解決回歸問題
決策樹基于ID3、C4.5、CART算法,回歸問題是基于CART算法實現(xiàn)的,基尼系數(shù)。
導入boston房價的數(shù)據(jù),以及決策樹的回歸問題接口,接下來要調(diào)用數(shù)據(jù)接口,獲取數(shù)據(jù)集,然后獲取特征名稱、特征集、得到訓練集和測試集的特征和標簽,然后進行訓練和預測。