天天看點

機器學習_相親資料決策樹實戰

需求:根據訓練集預測是否要見相親對象

機器學習處理問題流程:

1.準備資料,導入資料集

2.資料探索性分析,EDA分析

3.特征工程(資料處理、特征的預處理)

4.資料切分:訓練集+測試集,訓練集占比例高的

5.模型訓練(訓練集+機器學習算法—決策樹算法)

6.利用測試資料進行預測—通過測試資料X灌入算法中得到一個預測值Y1

7.|Y-Y1|誤差,模型訓練過程中使得模型的誤差變小

8.模型評價:準确率、錯誤率、誤差

1.準備資料,這裡的資料已經完成了123步驟,檔案名為SklearnTest.txt

特征分别為height,house,car,handsome,job,類标簽為is_date 表示是否約會,其中0表示不約,1表示約,-1則是我們需要預測是否約會的标記

height,house,car,handsome,job,is_date
1.80,1,0,6.5,2,1
1.62,1,0,5.5,0,1
1.71,0,1,8.5,1,1
1.58,1,1,6.3,1,1
1.68,0,1,5.1,0,0
1.63,1,0,5.3,1,0
1.78,0,0,4.5,0,0
1.64,0,0,7.8,2,0
1.65,0,1,6.6,0,-1
           

讀取資料集

import pandas as pd#調用NUMPy裡強大的資料處理庫padndas 起别名pd
df = pd.read_csv("SklearnTest.txt")#讀取csv檔案為DataFrame類型
           

4.資料切分:訓練集+測試集

注:訓練集和測試集一般比例為82分

train=df.query("is_date!=-1")#建立是否約會不等于-1的訓練集
test=df.query("is_date==-1")#建立是否約會為-1的測試集
#進一步提取X和y(這裡的x和y其實就是我們國中學的類似2x=y x是變量 y是值)
#對訓練資料和測試資料進行進一步處理
y_train=train["is_date"]#訓練集的值為是否約會
x_train=train.drop(["is_date"],axis=1)#axis=1代表按照列進行删除,訓練集的x為删除是否約會的類标簽
print (y_train)#列印訓練集值y在控制台上
print (x_train)#列印訓練集變量x在控制台上
#對測試資料進行處理
y_test=test["is_date"]#定義測試集y
x_test=test.drop(["is_date"],axis=1)#定義測試集x
           

5.模型訓練(這裡調用的是決策樹分類器算法)

#準備決策樹算法進行預測
from sklearn.tree import DecisionTreeClassifier#導入算法
dtc=DecisionTreeClassifier()#初始化
dtc.fit(x_train,y_train)#把訓練集的x和y扔進去進行訓練,進而得到模型
           

6.利用測試資料進行預測

y_pred=dtc.predict(x_test)#利用模型進行預測
print (y_pred)#列印預測值
           

決策樹可視化展示

from sklearn.tree import export_graphviz#調用graphviz工具生成檔案
export_graphviz(dtc.tree_,out_file="love.dot",filled=True,feature_names=df.columns,class_names=["is_data:no","is_Date:yes"])
#參數分别為類型,輸出檔案名,是否填充,以及将是否約會的結果01進行置換為"不約","約"
           

可視化展示需要去graphviz官網去下載下傳檔案

機器學習_相親資料決策樹實戰

然後進行安裝配置

然後進入love.dot所在的位置,按住Ctrl+Shift+滑鼠右鍵即可打開graphviz指令視窗.

使用指令生成相對應的檔案png為圖檔,pdf為文檔

機器學習_相親資料決策樹實戰

打開檔案檢視可視化圖檔

機器學習_相親資料決策樹實戰

附:

決策樹api文檔資料

1.分類決策樹 SKlearn 的 API 介紹

詳情可以使用谷歌浏覽器打開網址

決策樹文檔:http://scikit-learn.org/stable/modules/tree.html#classification 決策樹分類器的簡介: http://scikitlearn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.ht ml#sklearn.tree.DecisionTreeClassifier Class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, splitter=’best’, max_depth=None, min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.0, max_features=None, random_state=None,max_leaf_nodes=None,min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)[source]¶

接下來分别分析參數

2.API 的參數詳解

(1)criterion:一個字元串,指定切分品質的評價準則。可以為如下兩個參數: Gini:表示切分時評價準則時 Gini 系數。 Entropy:表示切分的時候評價準則是熵

(2)splitter:一個字元串,指定切分原則,可以為如下: best:表示選擇最優的切分 random:表示随機切分

(3)max_features:可以為整數、浮點、字元串或者 None,指定了尋找 best split 時考 慮的特征數量。 如果是整數,則每次切分隻考慮 max_features 個特征。 如果是浮點數,則每次切分隻考慮 max_features*n_features 個特征。 如果是字元串 auto 或者 sqrt,則 max_features 等于 sqrt(n_feautures) 如果是字元串 log2,則 max_features 等于 log2(n_features) 如果是 none,則 max_features 等于 n_features. (4)max_depth:可以為整數或者 None,指定樹的最大深度。 如果為 None,則表示樹的深度不限(直到每個葉子都是純的,即葉子結點中所有的樣 本點都屬于一個類,或者葉子中包含小于 min_samples_split 個樣本點。 (5)min_samples_split:為整數,指定每個内部節點(非葉子節點)包含的最少樣本數。

(6)min_samples_leaf 為整數,指定每個葉子節點包含的最少的樣本數。 (7)min_weight_fraction_leaf:為浮點數,葉子結點中樣本的最小權重系數。

(8)min_leaf_nodes:為整數或 None,指定最大的葉節點數量。 如果為 None,此時葉子節點數量不限制。 如果為非 None,則 max_depth 被忽略。

(9)class_weight:為一個字典、字典的清單、字元串‘balanced’,或者 None,它指定了 分類的權重。權重的形式為:{class_label:weight} 如果是 None,則每個分類的權重都為 1. 字元串 balanced 表示分類權重是樣本中各分類出現頻率的反比。

(10)random_state:一個整數或者一個 Randomstate 執行個體,或者 None。 如果為整數,則它指定了随機數生成器的種子。 如果為 Randomstate 執行個體,則指定了随機數生成器。 如果為 None,則使用預設的随機數生成器。 (11)presort:一個布爾值,指定是否提前排序資料,進而加速尋找最優切分的過程。 設定為 True 時,對于大資料集會減慢總體的訓練過程;但是對于一個小資料集或者設定了 最大深度的情況下,會加速訓練過程。

3. API 的屬性詳解 共 7 各屬性: (1)classes_:分類的标簽值 (2)feature_importances_:給出了特征的重要程度。該值越高,則特征越重要(也稱之為

Gini_importance) (3)max_feature_:max_feature 的推斷值。 (4)n_classes_:給出了分類的數量 (5)n_feautures_:執行 fit 之後特征的數量 (6)n_outputs_:執行 fit 之後輸出的數量 (7)tree_:一個 Tree 對象,即底層的決策樹。

4.API 的方法詳解 共有五種方法:

(1)fit(X,y):訓練模型

(2)predict(X,)用模型進行預測,傳回預測值

(3)predict_log_proba(X):傳回一個數組,數組的元素依次是 X 預測為各個類别的機率 的對數值。

(4)predict_proba(X):傳回一個數組,數組的元素依次時 X 預測為各個類别的機率值。

(5)score(X,y):傳回在(X,y)上預測的準确率(accurary)的平均值。

繼續閱讀