構建決策樹和svm模型(某金融資料集)

2021-09-01 04:19:31 字數 4733 閱讀 6056

根據金融資料集作出的決策樹和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...