python數據挖掘入門與實戰——學習筆記(第5、6章)

chapter 5 用轉換器抽取特徵(感覺有點特徵工程的意思)

本章所討論的是如何從數據集中抽取數值和類別型特徵,並選出最佳特徵。

特徵抽取

對於各個實物,我們只有先把現實用特徵表示出來,才能藉助數據挖掘的力量找到問題的答案。特徵選擇的另一個優點在於降低真實世界的複雜度。

dataframe中的unique函數有點類似於SQL中的distinct,能把一列中互不相同的元素篩選出來。

數據離散化:條件判斷,劃分。


特徵選擇

sklearn中的VarianceThreshold轉換器可用來刪除特徵值的方差達不到最低標準的特徵。

from sklearn.feature_selection import VarianceThreshold
vt = VarianceThreshold()
xt = vt.fit_transform(x)
輸出xt後,會發現不符合要求的列消失了。
print(vt.variances_) #輸出每一列的方差


選擇最佳特徵

sklearn提供了幾個用於選擇單變量特徵的轉換器:

SelectKBest返回k個最佳特徵

SelectPercentile返回表現最佳的前r%個特徵

單個特徵和某一類別之間相關性的計算方法有很多。常用的有卡方檢驗、互信息、信息熵等。

使用SelectKBest轉換器類,用卡方函數打分

from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
transformer = SelectKBest(score_func=chi2, k=3)
xt_chi2 = transformer.fit_transform(x, y)#對數據集進行預處理和轉換,結果爲分類效果較好的三個特徵
print(transformer.scores_)#打印每一列的相關性

PCA

from sklearn.decomposition import PCA
pca = PCA(n_components = 5)
xd = pca.fit_transform(x)

創建自己的轉換器

轉換器有兩個關鍵函數。

fit():接收訓練數據,設置內部函數。

transform():轉換過程。接收訓練數據集或相同格式的新數據集。

轉換器接收numpy數組作爲輸入,根據均值將其離散化。任何高於均值的特徵值替換爲1,小於或等於均值的替換爲0.

from sklearn.base import TransformerMixin
from sklearn.utils import as_float_array

class MeanDiscrete(TransformerMixin):
    def fit(self, x):
        x = as_float_array(x)
        self.mean = x.mean(axis = 0)
        return self
    def transform(self, x):
        x = as_float_array(x)
        assert x.shape[1] == self.mean.shape[0]
        return x > self.mean

chapter 6 使用樸素貝葉斯進行社會媒體挖掘

N元語法

比起用單個詞做特徵,使用N元語法能更好地描述文檔。N元語法是指由幾個連續的詞組成的子序列。拿本章用的數據集來講,N元語法指的就是每條消息裏一組連續的詞。

N元語法的計算方法跟計算單個詞語方法相同,把構成N元語法的幾個詞看成是詞袋中的一個詞。數據集中每一項就變成了N元語法在給定文檔中的詞頻。

比如,“厲害了我的國”,設N = 3,則這句話的3元語法爲,“厲害了”、“害了我”、“了我的”、“我的國”。

N元語法比起單個詞,可有助於理解詞語用法的上下文信息、有助於發現拼寫錯誤。它的缺點是特徵矩陣變得更爲稀疏。


當用流水線組合起來後,爲了得到模型,就用流水線的fit函數,創建模型。藉助流水線的named_steps屬性和步驟名,就能訪問流水線的每一個步驟。如,可訪問樸素貝葉斯模型。

model = pipeline.fit(x, y)
nb = model.named_steps['naive-bayes']


發佈了25 篇原創文章 · 獲贊 14 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章