機器學習之路: python 決策樹分類DecisionTreeClassifier 預測泰坦尼克號乘客是否幸存


 

 

使用python3 學習了決策樹分類器的api

涉及到 特征的提取,數據類型保留,分類類型抽取出來新的類型

需要網上下載數據集,我把他們下載到了本地,

可以到我的git下載代碼和數據集: https://github.com/linyi0604/MachineLearning

 

 1 import pandas as pd
 2 from sklearn.cross_validation import train_test_split
 3 from sklearn.feature_extraction import DictVectorizer
 4 from sklearn.tree import DecisionTreeClassifier
 5 from sklearn.metrics import classification_report
 6 
 7 '''
 8 決策樹
 9 涉及多個特征,沒有明顯的線性關系
10 推斷邏輯非常直觀
11 不需要對數據進行標准化
12 '''
13 
14 '''
15 1 准備數據
16 '''
17 # 讀取泰坦尼克乘客數據,已經從互聯網下載到本地
18 titanic = pd.read_csv("./data/titanic/titanic.txt")
19 # 觀察數據發現有缺失現象
20 # print(titanic.head())
21 
22 # 提取關鍵特征,sex, age, pclass都很有可能影響是否幸免
23 x = titanic[['pclass', 'age', 'sex']]
24 y = titanic['survived']
25 # 查看當前選擇的特征
26 # print(x.info())
27 '''
28 <class 'pandas.core.frame.DataFrame'>
29 RangeIndex: 1313 entries, 0 to 1312
30 Data columns (total 3 columns):
31 pclass    1313 non-null object
32 age       633 non-null float64
33 sex       1313 non-null object
34 dtypes: float64(1), object(2)
35 memory usage: 30.9+ KB
36 None
37 '''
38 # age數據列 只有633個,對於空缺的 采用平均數或者中位數進行補充 希望對模型影響小
39 x['age'].fillna(x['age'].mean(), inplace=True)
40 
41 '''
42 2 數據分割
43 '''
44 x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=33)
45 # 使用特征轉換器進行特征抽取
46 vec = DictVectorizer()
47 # 類別型的數據會抽離出來 數據型的會保持不變
48 x_train = vec.fit_transform(x_train.to_dict(orient="record"))
49 # print(vec.feature_names_)   # ['age', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', 'sex=female', 'sex=male']
50 x_test = vec.transform(x_test.to_dict(orient="record"))
51 
52 '''
53 3 訓練模型 進行預測
54 '''
55 # 初始化決策樹分類器
56 dtc = DecisionTreeClassifier()
57 # 訓練
58 dtc.fit(x_train, y_train)
59 # 預測 保存結果
60 y_predict = dtc.predict(x_test)
61 
62 '''
63 4 模型評估
64 '''
65 print("准確度:", dtc.score(x_test, y_test))
66 print("其他指標:\n", classification_report(y_predict, y_test, target_names=['died', 'survived']))
67 '''
68 准確度: 0.7811550151975684
69 其他指標:
70               precision    recall  f1-score   support
71 
72        died       0.91      0.78      0.84       236
73    survived       0.58      0.80      0.67        93
74 
75 avg / total       0.81      0.78      0.79       329
76 '''

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM