根據金融資料集作出的決策樹和svm模型
# 匯入需要的包
import pandas as pd
from sklearn.linear_model import logisticregression
from sklearn.model_selection import train_test_split, gridsearchcv
from sklearn.metrics import roc_auc_score, f1_score
from matplotlib import pyplot as plt
from sklearn.svm import svc
from sklearn.svm import linearsvc
from sklearn.tree import decisiontreeclassifier
# 因為資料並非utf-8編碼,要使用gbk編碼讀入,否則出錯
data = pd.read_csv(
'./data.csv'
, index_col=
0, encoding=
'gbk'
)
# 單獨提取出y標籤列,和其餘的88列標記為x
y = data[
'status'
]x = data.drop(
'status'
, axis=1)
#x值的行列數,以及y的分布型別
print
('x.shape:'
, x.shape)
print
('y 的分布\n'
, y.value_counts(
))
x.shape: (4754, 88)
y 的分布
0 3561
1 1193
name: status, dtype: int64
# 首先剔除一些明顯無用的特徵,如 id_name, custid, trade_no, bank_card_no,
x.drop(
['id_name'
,'custid'
,'trade_no'
,'bank_card_no'
], axis=
1, inplace=
true
)print
(x.shape)
(4754, 84)
# 選取數值型特徵
x_num = x.select_dtypes(
'number'
).copy(
)print
(x_num.shape)
type
(x_num.mean(
))
(4754, 80)
pandas.core.series.series
#使用均值填充缺失值
x_num.fillna(x_num.mean(
), inplace=
true
)
#觀察除數值型以外的變數
x_str = x.select_dtypes(exclude=
'number'
).copy(
)x_str.describe(
)
reg_preference_for_trad
source
latest_query_time
loans_latest_time
count
4752
4754
4450
4457
unique51
207232
top一線城市
xs2018-04-14
2018-05-03
freq
3403
4754
423134
#把reg_preference用虛擬變數代替,其它三個變數刪除
x_str[
'reg_preference_for_trad'
]= x_str[
'reg_preference_for_trad'
].fillna(x_str[
'reg_preference_for_trad'
].mode()[
0])x_str_dummy = pd.get_dummies(x_str[
'reg_preference_for_trad'])
x_str_dummy.head(
)#x_str.drop(['latest_query_time'],axis=1,inplace=true)
一線城市
三線城市
二線城市
其他城市境外5
1000
01010
00012
1000
01301
00014
1000
0
x_cl = pd.concat(
[x_num, x_str_dummy]
, axis=
1, sort=
false
)x_cl.shape
(4754, 85)
#以三七比例分割訓練集和測試集
random_state =
1115
x_train, x_test, y_train, y_test = train_test_split(x_cl, y, test_size=
0.3, random_state=random_state)
print
(x_train.shape)
print
(x_test.shape)
(3327, 85)
(1427, 85)
#svc模型,不明白嘗試了svc和lin_svc做出的**f1都是0。只是因為沒有資料預處理時候歸一化?
"""svc = svc(c=1.0, kernel='rbf', gamma=0.1)
svc.fit(x_train, y_train)
#lin_svc模型
lin_svc = linearsvc()
lin_svc.fit(x_train,y_train)
"""#決策樹模型
clf = decisiontreeclassifier(max_depth=4)
clf.fit(x_train, y_train)
decisiontreeclassifier(class_weight=none, criterion='gini', max_depth=4,
max_features=none, max_leaf_nodes=none,
min_impurity_split=1e-07, min_samples_leaf=1,
min_samples_split=2, min_weight_fraction_leaf=0.0,
presort=false, random_state=none, splitter='best')
#評估
# 準確性
"""y_train_pred = svc.predict(x_train)
y_test_pred = svc.predict(x_test)
""""""
#lin_svc
y_train_pred = lin_svc.predict(x_train)
y_test_pred = lin_svc.predict(x_test)
"""#決策樹
y_train_pred = clf.predict(x_train)
y_test_pred = clf.predict(x_test)
print
('準確性:'
)print
('訓練集:'
.format
(f1_score(y_train, y_train_pred)))
print
('測試集:'
.format
(f1_score(y_test, y_test_pred)))
print
('roc auc:'
)print
('訓練集:'
.format
(roc_auc_score(y_train, y_train_pred)))
print
('測試集:'
.format
(roc_auc_score(y_test, y_test_pred)
))
準確性:
訓練集:0.4083
測試集:0.3992
roc auc:
訓練集:0.6227
測試集:0.6166
問題:
不明白svm以及線性svm作出的**f1-score為什麼是0,只是因為資料沒有歸一化麼?
svm 決策樹和隨機森林
決策樹隨機森林 scikit learn 和 tensorflow 裡面的svm講的可以 svm就是從多條可以分割類別的線之間挑一條最好的 離分類兩邊各個點的距離都足夠大 分割線稱為超平面 嚴格的讓所有例項都不在街上,並且位於正確的一邊,需要是線性分類的,對異常值太過敏感 可以允許有部分異常值在街道...
資料探勘演算法原理 決策樹模型原理
決策數演算法 決策樹剪枝策略 決策樹 樹的組成 根節點 第乙個選擇點 非葉子節點與分支 中間過程 葉子節點 最終的決策結果 如何切分特徵 選擇節點 問題 根節點的選擇該用哪個特徵呢?接下來呢?如何切分呢?目標 通過一種衡量標準,來計算通過不同特徵進行分支選擇後的分類 情況,找出來最好的那個當成根節點...
構建網格搜尋 交叉驗證(lr模型)(某金融資料集)
import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.model selection import train test split from sklearn.metrics impor...