贝叶斯网络分析kaggle泰坦尼克号数据
貝葉斯網絡分析kaggle泰坦尼克號(Titanic)
一、數據處理
1.原始數據分析
主要是讓參賽選手根據訓練集中的乘客數據和存活情況進行建模,進而使用模型預測測試集中的乘客是否會存活。乘客特征總共有11個,以下列出。當然也可以根據情況自己生成新特征,這就是特征工程(feature engineering)要做的事情了。
PassengerId => 乘客ID
Pclass => 客艙等級(1/2/3等艙位)
Name => 乘客姓名
Sex => 性別
Age => 年齡
SibSp => 兄弟姐妹數/配偶數
Parch => 父母數/子女數
Ticket => 船票編號
Fare => 船票價格
Cabin => 客艙號
Embarked => 登船港口
2.數據清洗
- 數據集合并
- 查找缺失值
從缺失值來看,Embarked(登船港口)和Fare(船票價格)缺失值較少,Age與Cabin(客艙號)缺失較多,可能該特征對結果有較大的影響,將年齡與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()先根據‘Name’提取‘Title’,再用‘Title’的中位數對‘Age‘進行插補.先假設little girl都沒結婚(一般情況下該假設都成立),所以little girl肯定都包含在Miss里面。little boy(Master)的年齡最大值為14歲,所以相應的可以設定年齡小于等于14歲的Miss為little girl。
至此數據缺失值處理完畢。
3.數據可視化
-
性別對獲救情況的影響
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))
可以認為女性獲救的概率大于男性獲救的概率,將性別作為特征值。
-
客艙等級與獲救的關系
可以認為客艙等級對結果產生了影響,將客艙等級看做特征值。
-
4.特征工程
最后保留如下項目,并切出800的訓練集:
Pclass => 客艙等級(0/1/2等艙位)
Sex => 性別 male=1 female=0
Age => 年齡 插補后分0,1,2 代表 幼年(0-15) 成年(15-55) 老年(55-)
Fare => 船票價格 經聚類變0 1 2 代表少 多 很多
Cabin => 客艙號 清洗成有無此項,并發現有的生存率
最后拿來的訓練集train如下:
二、貝葉斯網絡搭建
1.設計貝葉斯網絡
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')])憑借對特征的理解,構建上圖所示的有向圖模型。
2.參數導入
model.fit(train, estimator=BayesianEstimator, prior_type="BDeu")至此,模型構建完畢,開始進行推理。
3.推理
from pgmpy.inference import VariableElimination model_infer = VariableElimination(model) q = model_infer.query(variables=['Survived'], evidence={'Fare': 0}) print(q['Survived'])得到一個Fare = 0時,P(Survived|Fare =0)的概率分布表。
4.預測
predict_data=test.drop(columns=['Survived'],axis=1) y_pred = model.predict(predict_data) print((y_pred['Survived']==test['Survived']).sum()/len(test))得到預測的精度為:0.8131868131868132
泰坦尼克號數據下載
三、問題
- 概率圖,貝葉斯網絡的預測精度提升方法?
- 當特征隨機變量的值過多的時候,是否能通過概率圖模型推理出精度較高的模型?
總結
以上是生活随笔為你收集整理的贝叶斯网络分析kaggle泰坦尼克号数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sensor信号输出YUV、RGB、RA
- 下一篇: oracle三大索引类型