日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

贝叶斯网络分析kaggle泰坦尼克号数据

發(fā)布時(shí)間:2023/12/31 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 贝叶斯网络分析kaggle泰坦尼克号数据 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

貝葉斯網(wǎng)絡(luò)分析kaggle泰坦尼克號(Titanic)

一、數(shù)據(jù)處理

1.原始數(shù)據(jù)分析

主要是讓參賽選手根據(jù)訓(xùn)練集中的乘客數(shù)據(jù)和存活情況進(jìn)行建模,進(jìn)而使用模型預(yù)測測試集中的乘客是否會(huì)存活。乘客特征總共有11個(gè),以下列出。當(dāng)然也可以根據(jù)情況自己生成新特征,這就是特征工程(feature engineering)要做的事情了。

PassengerId => 乘客ID

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

Name => 乘客姓名

Sex => 性別

Age => 年齡

SibSp => 兄弟姐妹數(shù)/配偶數(shù)

Parch => 父母數(shù)/子女?dāng)?shù)

Ticket => 船票編號

Fare => 船票價(jià)格

Cabin => 客艙號

Embarked => 登船港口

2.數(shù)據(jù)清洗

  • 數(shù)據(jù)集合并
#合并訓(xùn)練集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(船票價(jià)格)缺失值較少,Age與Cabin(客艙號)缺失較多,可能該特征對結(jié)果有較大的影響,將年齡與Cabin視作特征。

  • Age缺失值處理

    full['Title']=full['Name'].apply(lambda x: x.split(',')[1].split('.')[0].strip()) full.Title.value_counts() def girl(aa):if (aa.Age!=999)&(aa.Title=='Miss')&(aa.Age<=14):return 'Girl'elif (aa.Age==999)&(aa.Title=='Miss')&(aa.Parch!=0):return 'Girl'else:return aa.Titlefull['Title']=full.apply(girl,axis=1)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()

    先根據(jù)‘Name’提取‘Title’,再用‘Title’的中位數(shù)對‘Age‘進(jìn)行插補(bǔ).先假設(shè)little girl都沒結(jié)婚(一般情況下該假設(shè)都成立),所以little girl肯定都包含在Miss里面。little boy(Master)的年齡最大值為14歲,所以相應(yīng)的可以設(shè)定年齡小于等于14歲的Miss為little girl。

    至此數(shù)據(jù)缺失值處理完畢。

    3.數(shù)據(jù)可視化

    • 性別對獲救情況的影響

      pd.crosstab(full.Sex,full.Survived).plot.bar(stacked=True,figsize=(8,5),color=['#4169E1','#FF00FF']) plt.xticks(rotation=0,size='large') plt.legend(bbox_to_anchor=(0.55,0.9))

    可以認(rèn)為女性獲救的概率大于男性獲救的概率,將性別作為特征值。

    • 客艙等級與獲救的關(guān)系

      可以認(rèn)為客艙等級對結(jié)果產(chǎn)生了影響,將客艙等級看做特征值。

4.特征工程

最后保留如下項(xiàng)目,并切出800的訓(xùn)練集:
Pclass => 客艙等級(0/1/2等艙位)
Sex => 性別 male=1 female=0
Age => 年齡 插補(bǔ)后分0,1,2 代表 幼年(0-15) 成年(15-55) 老年(55-)
Fare => 船票價(jià)格 經(jīng)聚類變0 1 2 代表少 多 很多
Cabin => 客艙號 清洗成有無此項(xiàng),并發(fā)現(xiàn)有的生存率

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']=0 full.loc[(full['Age']>15)&(full['Age']<55),'Age']=1 full.loc[full['Age']>=55,'Age']=2 full['Pclass']=full['Pclass']-1 from sklearn.cluster import KMeans Fare=full['Fare'].values Fare=Fare.reshape(-1,1) km = KMeans(n_clusters=3).fit(Fare) #將數(shù)據(jù)集分為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['Sex']=full['Sex'].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:]

最后拿來的訓(xùn)練集train如下:

二、貝葉斯網(wǎng)絡(luò)搭建

1.設(shè)計(jì)貝葉斯網(wǎng)絡(luò)

from pgmpy.models import BayesianModel from pgmpy.estimators import BayesianEstimator#model = BayesianModel([('Age', 'Pri'), ('Sex', 'Pri'),('Pri','Survived'),('Fare','Pclass'),('Pclass','Survived'),('Cabin','Survived')]) model = BayesianModel([('Age', 'Survived'), ('Sex', 'Survived'),('Fare','Pclass'),('Pclass','Survived'),('Cabin','Survived')])

憑借對特征的理解,構(gòu)建上圖所示的有向圖模型。

2.參數(shù)導(dǎo)入

model.fit(train, estimator=BayesianEstimator, prior_type="BDeu")

至此,模型構(gòu)建完畢,開始進(jìn)行推理。

3.推理

from pgmpy.inference import VariableElimination model_infer = VariableElimination(model) q = model_infer.query(variables=['Survived'], evidence={'Fare': 0}) print(q['Survived'])

得到一個(gè)Fare = 0時(shí),P(Survived|Fare =0)的概率分布表。

4.預(yù)測

predict_data=test.drop(columns=['Survived'],axis=1) y_pred = model.predict(predict_data) print((y_pred['Survived']==test['Survived']).sum()/len(test))

得到預(yù)測的精度為:0.8131868131868132

泰坦尼克號數(shù)據(jù)下載

三、問題

  • 概率圖,貝葉斯網(wǎng)絡(luò)的預(yù)測精度提升方法?
  • 當(dāng)特征隨機(jī)變量的值過多的時(shí)候,是否能通過概率圖模型推理出精度較高的模型?

總結(jié)

以上是生活随笔為你收集整理的贝叶斯网络分析kaggle泰坦尼克号数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。