1. 程式人生 > >python資料探勘入門與實戰——學習筆記(第3、4章)

python資料探勘入門與實戰——學習筆記(第3、4章)

chapter 3 決策樹預測獲勝球隊

pandas載入資料集

import pandas as pd
dataset = pd.read_csv('filepath+filename')
資料清洗,可在讀入時清洗
dataset = pd.read_csv('filename', parse_date=['Date'], skiprows = [0, ])

建立預設字典(value為int型別)
from collections import defaultdict
won_last = defaultdict(int)

sklearn實現了CART(分類迴歸樹),並將其作為生成決策樹的預設演算法,它支援連續型特徵和類別型特徵。

決策樹防止過擬合:

1、退出準則:使用一下兩個變數達到目的

min_samples_split:指定建立一個新節點至少需要的個體數量

min_samples_leaf:指定為了保留節點,每個節點至少應該包含的個體數量

第一個引數控制著決策節點的建立,第二個引數決定著決策節點能否被保留。

2、後剪枝

使用決策樹

from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(random_state = 14)
仍然使用交叉驗證法求平均正確率
scores = cross_val_score(clf, x, y, cv = 10, scoring = 'accuracy')

sklearn 所實現的決策樹演算法要求對類別型資料進行處理。用LabelEncoder轉換器就能把字串型別的球隊名稱轉化為整型。
from sklearn.preprocessing import LabelEncoder
encoding = LabelEncoder()
encoding.fit([array-like data])#編碼
home_team = encoding.transform([array-like data])#對映

決策樹可以用這些特徵值(整型)進行訓練,但DecisionTreeClassifier仍把他們當做連續特徵處理,進行運算。然而這些運算是毫無意義的,他們之間只有相同和不同,沒有中間狀態。為了消除這種和實際不一致的情況,可以使用OneHotEncoder轉換器把這些整數轉換為二進位制數字。這樣資料集會變大。

from sklearn.preprocessing import OneHotEncoder
onehot = OneHotEncoder()
home_team_expanded = onehot.fit_transform(home_team).todense()
然後將one-hot編碼後的資料集進行分類和交叉驗證。

np.vstack():按行垂直排列


使用隨機森林

一棵決策樹能學到很複雜的規則,然而, 很可能會導致過擬合問題。解決方法之一就是調整決策樹演算法,限制它所學到的規則的數量。例如,把決策樹的深度限制在三層,等等。使用這種折中方案得到的決策樹泛化能力強,但整體表現稍弱。

為了彌補上述方法的不足,我們可建立多棵決策樹,用它們分別進行預測,在根據投票情況選擇最終預測結果。這正是隨機森林的工作原理。

隨機森林是一種bagging方法,它採用有放回取樣,在建立每棵樹之前,都隨機的從樣本集中選出一部分作為訓練集。此為第一層“隨機”的含義。隨機森林的第二層“隨機”含義是指,在總的特徵空間中,隨機選取部分特徵作為決策依據。然後使用隨機從資料集中選取的資料和隨機選取的特徵,建立多棵決策樹。This is random forest!

隨機森林演算法的引數

sklearn中的RandomForestClassifier就是對隨機森林演算法的實現。因為它使用了DecisionTreeClassifier的大量例項,所以它倆的很多引數是一致的。

當然,整合過程中還引入了一些新引數。

n_estimators:決策樹的數量。值越大,時間越長,正確率(可能)也越高。

oob-score:若設定為真,測試時將不使用訓練模型時用過的資料。

n_jobs:採用平行計算方法訓練決策樹時所用到的核心數量。

使用隨機森林演算法

from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(random_state = 14)
scores = cross_val_score(clf, x, y, cv = 10, scoring = 'accuracy')

使用GridSearchCV類搜尋最佳引數
from sklearn.model_selection import GridSearchCV
clf = RandomForestClassifier(random_state = 14)
parameter_space = {
	"max_features": [2, 10, 'auto'],
	"n_estimators": [100,],
	"criterion": ["gini", "entropy"],
	"min_samples_leaf": [2, 4, 6],
	}
grid = GridSearchCV(clf, parameter_space)
grid.fit(x, y)
print(grid.best_estimator_)

建立新特徵

書中說可用pandas提供的函式feature_creator建立特徵,可我試了,pandas裡面並沒有這個函式,有知道原委的朋友,歡迎留言告知。

chapter 4 用親和性分析方法推薦電影

所謂親和性分析方法,我個人理解就是頻繁項集挖掘和推薦。

親和性分析用來找出兩個物件共同出現的情況。親和性分析所用的資料通常類似於交易資訊的資料。

時間戳資料的解析

df['Datetime'] = pd.to_datetime(df['Datetime'])

稀疏資料格式

若資料集中60%或以上的資料為0,就應該考慮使用稀疏矩陣,從而節省不少空間。

由於本章介紹的Apriori演算法在效率等方面沒有FP-Growth演算法好,而FP-Growth演算法我已在之前的博文中介紹過,因此本章內容記錄較為簡略。