貝葉斯網路分析kaggle鐵達尼號資料

2021-09-29 11:38:06 字數 4212 閱讀 4333

主要是讓參賽選手根據訓練集中的乘客資料和存活情況進行建模,進而使用模型**測試集中的乘客是否會存活。乘客特徵總共有11個,以下列出。當然也可以根據情況自己生成新特徵,這就是特徵工程(feature engineering)要做的事情了。

passengerid => 乘客id

pclass => 客艙等級(1/2/3等艙位)

name => 乘客姓名

*** => 性別

age => 年齡

sibsp => 兄弟姐妹數/配偶數

parch => 父母數/子女數

ticket => 船票編號

fare => 船票**

cabin => 客艙號

embarked => 登船港口

#合併訓練集train和測試集test

train=pd.read_csv(

'./train.csv'

)test=pd.read_csv(

'./test.csv'

)full=pd.concat(

[train,test]

,ignore_index=

true

)

full.isnull().

sum(

)

從缺失值來看,embarked(登船港口)和fare(船票**)缺失值較少,age與cabin(客艙號)缺失較多,可能該特徵對結果有較大的影響,將年齡與cabin視作特徵。

可以認為女性獲救的概率大於男性獲救的概率,將性別作為特徵值。

可以認為客艙等級對結果產生了影響,將客艙等級看做特徵值。

最後保留如下專案,並切出800的訓練集:

pclass => 客艙等級(0/1/2等艙位)

*** => 性別 male=1 female=0

age => 年齡 插補後分0,1,2 代表 幼年(0-15) 成年(15-55) 老年(55-)

fare => 船票** 經聚類變0 1 2 代表少 多 很多

cabin => 客艙號 清洗成有無此項,並發現有的生存率

tit=

['mr'

,'miss'

,'mrs'

,'master'

,'girl'

,'rareman'

,'rarewoman'

]for i in tit:

full.loc[

(full.age==

999)

&(full.title==i)

,'age'

]=full.loc[full.title==i,

'age'

].median(

)

full.loc[full[

'age'

]<=15,

'age']=

0full.loc[

(full[

'age'

]>15)

&(full[

'age'

]<55)

,'age']=

1full.loc[full[

'age'

]>=55,

'age']=

2full[

'pclass'

]=full[

'pclass']-

1from sklearn.cluster import kmeans

fare=full[

'fare'

].values

fare=fare.reshape(-1

,1)km = kmeans(n_clusters=3)

.fit(fare)

#將資料集分為2類

fare = km.fit_predict(fare)

full[

'fare'

]=fare

full[

'fare'

]=full[

'fare'

].astype(

int)

full[

'age'

]=full[

'age'

].astype(

int)

full[

'cabin'

]=full[

'cabin'

].astype(

int)

full[

'pclass'

]=full[

'pclass'

].astype(

int)

full[

'***'

]=full[

'***'

].astype(

int)

#full['survived']=full['survived'].astype(int)

dataset=full.drop(columns=

['embarked'

,'name'

,'parch'

,'passengerid'

,'sibsp'

,'ticket'

,'title'])

dataset.dropna(inplace=

true

)dataset[

'survived'

]=dataset[

'survived'

].astype(

int)

#dataset=pd.concat([dataset, pd.dataframe(columns=['pri'])])

train=dataset[

:800

]test=dataset[

800:

]

最後拿來的訓練集train如下:

from pgmpy.models import bayesianmodel

from pgmpy.estimators import bayesianestimator

#model = bayesianmodel([('age', 'pri'), ('***', 'pri'),('pri','survived'),('fare','pclass'),('pclass','survived'),('cabin','survived')])

model = bayesianmodel([(

'age'

,'survived'),

('***'

,'survived'),

('fare'

,'pclass'),

('pclass'

,'survived'),

('cabin'

,'survived')]

)

憑藉對特徵的理解,構建上圖所示的有向圖模型。

model.fit(train, estimator=bayesianestimator, prior_type=

"bdeu"

)

至此,模型構建完畢,開始進行推理。

from pgmpy.inference import variableelimination

model_infer = variableelimination(model)

q = model_infer.query(variables=

['survived'

], evidence=

)print

(q['survived'

])

得到乙個fare = 0時,p(survived|fare =0)的概率分布表。

predict_data=test.drop(columns=['survived'],axis=1)

y_pred = model.predict(predict_data)

print((y_pred['survived']==test['survived']).sum()/len(test))

得到**的精度為:0.813186813186813

貝葉斯分析

1先來說一下貝葉斯統計與經典統計的不同之處 簡單說,頻率派認為估計物件 引數 是乙個未知的固定值。而貝葉斯卻認為未知的引數都是隨機變數。我曾經見到這麼個不錯的例子 我們要通過一些事實估計 愛因斯坦在1905年12月25日晚上八點吸菸 的真假。定義引數 那麼頻率派認為,愛因斯坦有沒有曾經在這時刻吸菸是...

貝葉斯網路

1.貝葉斯網路的定義 貝葉斯網路 bayesian network 又稱信念網路 belief network 或有向無環圖模型 directed acyclic graphical model 是一種概率圖模型,於1985年由judea pearl首先提出。它是一種模擬人類推理過程中因果關係的不確...

貝葉斯網路

一 貝葉斯網路,由乙個有向無環圖 dag 和條件概率表 cpt 組成。貝葉斯網路通過乙個有向無環圖來表示一組隨機變數跟它們的條件依賴關係。它通過條件概率分布來引數化。每乙個結點都通過p node pa node 來引數化,pa node 表示網路中的父節點。乙個簡單的貝葉斯網路,其對應的全概率公式為...