国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

機(jī)器學(xué)習(xí)入門實(shí)戰(zhàn)---預(yù)測(cè)泰坦尼克號(hào)上的生存者并熟悉機(jī)器學(xué)習(xí)的基礎(chǔ)知識(shí)

鄒立鵬 / 1005人閱讀

摘要:背景知識(shí)泰坦尼克號(hào)年月從英國(guó)南安普頓出發(fā),途徑法國(guó),愛爾蘭在美國(guó)大西洋碰觸冰山沉沒,一部分人幸免于難,一部分人沒有生存,這個(gè)案例中就是要通過機(jī)器學(xué)習(xí)的算法來預(yù)測(cè)一下中人的生存狀況。

背景知識(shí):

泰坦尼克號(hào)1912年4月從英國(guó)南安普頓出發(fā),途徑法國(guó),愛爾蘭在美國(guó)大西洋碰觸冰山沉沒,一部分人幸免于難,一部分人沒有生存,這個(gè)案例中就是要通過機(jī)器學(xué)習(xí)的算法來預(yù)測(cè)一下test.csv中418人的生存狀況。案例詳細(xì)內(nèi)容可以訪問網(wǎng)站:https://www.kaggle.com/c/titanic。通過這個(gè)案例你可以大致掌握一個(gè)機(jī)器學(xué)習(xí)的基本步驟,本文最后附上案例的源碼。

一、提出問題

首先我們從kaggle上下載了泰坦尼克號(hào)案例的train.csv和test.csv兩個(gè)數(shù)據(jù),這里我為大家已經(jīng)下好,大家可以在百度網(wǎng)盤里下載,地址:鏈接:https://pan.baidu.com/s/1RV-U... 密碼:zlkj。

二、理解數(shù)據(jù)

首先導(dǎo)入數(shù)據(jù),可以看到訓(xùn)練數(shù)據(jù)集train.csv中有891行,12列數(shù)據(jù),而測(cè)試數(shù)據(jù)集中有418行,11列數(shù)據(jù);缺少的這一列數(shù)據(jù)正是我們要預(yù)測(cè)的生存狀況數(shù)據(jù)。

import numpy as np
import pandas as pd
#導(dǎo)入訓(xùn)練集
train = pd.read_csv("train.csv")
#導(dǎo)入測(cè)試集
test = pd.read_csv("test.csv")
#查看測(cè)試數(shù)據(jù)集合訓(xùn)練數(shù)據(jù)集的形狀
# print("訓(xùn)練數(shù)據(jù)集:",train.shape)
# print("測(cè)試數(shù)據(jù)集:",test.shape)
full = train.append(test,ignore_index=True)
# print("合并后的數(shù)據(jù)集:",full.shape)
# print(full.head(10))

通過實(shí)驗(yàn)結(jié)果我們可以知道,每一名乘客都對(duì)應(yīng)著一個(gè)12維數(shù)據(jù),其含義是:

   1.Age:乘客年齡      
   2.Cabin:乘客船艙座位號(hào)
   3.Embarked:乘客登船的港口,有三個(gè)可選值:S:南安普頓,C:法國(guó)瑟堡 Q:愛爾蘭昆士敦
   4.Fare:船票費(fèi)用
   5.Name:乘客姓名
   6.parch:乘客的父母與子女?dāng)?shù)量
   7.PassengerId:乘客ID
   8.Pclass:乘客所在的船艙等級(jí),1;一等,2;二等;3:三等
   9.sex:乘客性別
   10.SibSp:乘客的兄弟姐妹以及配偶數(shù)量
   11.Survived:乘客是否存活標(biāo)志;1:活著的  0:死亡
   12.Ticket:票的編號(hào)

總數(shù)據(jù)有1309行,Age、Cabin、Embarked、Fare這四列數(shù)據(jù)中有缺失的情況,接下來的第三步就是要清洗數(shù)據(jù),填補(bǔ)缺失值。

三、清洗數(shù)據(jù)

首先處理一下缺失的數(shù)據(jù),如果缺失的數(shù)據(jù)是數(shù)字類型的,可以用平均數(shù)代替,如果是字符串類型的,可以用出現(xiàn)最多的數(shù)(眾數(shù))來替代。

# 填充年齡缺失值
full.Age = full.Age.fillna(full.Age.mean())
# 填充船票價(jià)格缺失值
full.Fare = full.Fare.fillna(full.Fare.mean())
# #填充登船的港口,因?yàn)樽疃嗟臑閟,故將所有的缺失值填充為S
full.Embarked = full.Embarked.fillna("S")
# 由于船票號(hào)這一欄缺失值過多,故將其填充為U
full.Cabin = full.Cabin.fillna("U")

在做好這一步之后,數(shù)據(jù)還需要對(duì)一些列的字符串?dāng)?shù)據(jù)類型進(jìn)行編碼,比如Sex性別的分類數(shù)據(jù),需要進(jìn)行one-hot編碼,方便機(jī)器學(xué)習(xí)識(shí)別。這里需要對(duì)性別、港口和姓名、船艙等級(jí)這些分類數(shù)據(jù),進(jìn)行重新編碼。應(yīng)用map函數(shù)可以對(duì)一列數(shù)據(jù)做同一個(gè)操作:

sexDict = {"male":1,"female":0}
sex = full.Sex.map(sexDict)
print(sex.head())

登船的港口有三個(gè),分別是英國(guó)南安普頓、法國(guó)瑟堡、愛爾蘭昆士敦,分別用首字母S、C、Q表示。

embarked = pd.DataFrame()
embarked = pd.get_dummies(full.Embarked,prefix="Embarked")
print(embarked.head())
#對(duì)船艙等級(jí)采取同樣的方法
pclass = pd.DataFrame()
pclass = pd.get_dummies(full.Pclass,prefix="Pclass")
print(pclass.head())
 

接下來我們看一下名字這一列的數(shù)據(jù)字符串格式:名,頭銜,姓,我們需要從名字里面獲取頭銜來判定是否對(duì)生存情況的影響。通過定義一個(gè)函數(shù):
第一步獲取name1剔除名字中逗號(hào)前面的名,
第二步剔除名字中冒號(hào)后面的姓,
第三步用strip函數(shù)剔除字符串頭尾指定的字符(默認(rèn)為空格)然后返回中間的頭銜。
第四步應(yīng)用函數(shù),用一個(gè)表格型數(shù)據(jù)Df存放提取后的頭銜,
第五步講姓名中的頭銜字符串與定義頭銜類別的映射關(guān)系,再把頭銜進(jìn)行one-hot編碼,

定義一個(gè)函數(shù)獲取每一個(gè)姓名列中的頭銜
def title1(name):
    name1 = name.split(",")[1]
    name2 = name1.split(".")[0]
    #使用strip函數(shù)提出姓名列的頭尾,獲得頭銜
    name3 = name2.strip()
    return name3
titleDf = pd.DataFrame()
titleDf["Title"] = full.Name.map(title1)
titleDict = {
    "Capt":"officer",
    "Col":"officer",
    "Major":"officer",
    "Dr":"officer",
    "Rev":"officer",
    "Jonkheer":"Royalty",
    "Don":"Royalty",
    "Sir":"Royalty",
    "the Countess":"Royalty",
    "Dona":"Royalty",
    "Lady":"Royalty",
    "Mlle":"Miss",
    "Miss":"Miss",
    "Mr":"Mr",
    "Mme":"Mrs",
    "Ms":"Mrs",
    "Mrs":"Mrs",
    "Master":"Master"
}
titleDf["Title"] = titleDf["Title"].map(titleDict)
titleDf = pd.get_dummies(titleDf["Title"])
print(titleDf.head())

接著從座位號(hào)提取坐席類別,用seat存放客艙號(hào)的信息坐席類別就是座位號(hào)的首字母,比如C85,類別映射為首字母C,用U代表不知道的數(shù)據(jù)。使用lambda匿名函數(shù)提取Cabin中的首字母:

seat = pd.DataFrame()
seat["seat"] = full["Cabin"]
seat.seat = seat.seat.map(lambda  a:a[0])
#使用one-hot編碼
seat = pd.get_dummies(seat.seat,prefix="Cabin")
#print(seat.head())

對(duì)船上每一個(gè)乘客的家庭成員數(shù)量進(jìn)行一個(gè)統(tǒng)計(jì)。分別將原始數(shù)據(jù)中的SibSp列和Parch中的數(shù)據(jù)相加,再加上被統(tǒng)計(jì)者自身。

#對(duì)船上每一個(gè)乘客的家庭成員數(shù)量進(jìn)行一個(gè)統(tǒng)計(jì)
family = pd.DataFrame()
family["family"] = full.SibSp + full.Parch + 1
#print(family.head())

最后就是將原始數(shù)據(jù)復(fù)制一份,刪除我們剛剛對(duì)其中重新編碼的列(Cabin、Name、Sex、Pclass、Embarked、Parch、SibSp;還有票的編號(hào)Ticket這一列沒有關(guān)系的數(shù)據(jù)。
最后合并的列包括了剛剛處理產(chǎn)生的新列名比如:da、family、seat、titleDf、pclass、embarked、sex。我們發(fā)現(xiàn)新的數(shù)據(jù)da有1309行,27列。

最后就是將原始數(shù)據(jù)復(fù)制一份,

刪除我們剛剛對(duì)其中重新編碼的列(Cabin、Name、Sex、Pclass、Embarked、Parch、SibSp; 還有票的編號(hào)Ticket這一列沒有關(guān)系的數(shù)據(jù).最后合并的列包括了剛剛處理產(chǎn)生的新列名比如:da、family、seat、titleDf、pclass、embarked、sex.我們發(fā)現(xiàn)新的數(shù)據(jù)da有1309行,27列

da = train.append(test,ignore_index=True)
#采取同樣的方式填充缺失值
da.Age = da.Age.fillna(da.Age.mean())
da.Fare = da.Fare.fillna(da.Fare.mean())
da.Embarked = da.Embarked.fillna("S")
da.Cabin = da.Cabin.fillna("U")
#提出不需要的列
da = da.drop(["Name","Pclass","Cabin","Parch","Embarked","SibSp","Ticket","Sex"],axis=1)
#合并修改后的列
da = pd.concat([titleDf,seat,family,pclass,embarked,da,sex],axis=1)
#print(da.shape)
#print(da.head())
四、模型建立與評(píng)估 第一步:用數(shù)據(jù)框corr()得到相關(guān)系數(shù)矩陣, 第二步:講相關(guān)系數(shù)矩陣的生存情況的列提取出來,分別按照降序排列和升序排列
#使用數(shù)據(jù)框corr獲取相關(guān)系數(shù)矩陣,將相關(guān)系數(shù)提取出來,按照升序和降序排列
corrDf = da.corr()
#print(corrDf["Survived"].sort_values(ascending=False))
#print(corrDf["Survived"].sort_values(ascending=True))

我們發(fā)現(xiàn)相關(guān)系數(shù)大于0的列中:頭銜、客艙等級(jí)、船票價(jià)格、船艙號(hào)都與生存狀況呈現(xiàn)正線性關(guān)系在相關(guān)系數(shù)小于0的列中:頭銜、性別、客艙等級(jí)、客艙號(hào)與生存情況呈現(xiàn)負(fù)線性相關(guān)。這些特征其實(shí)與我們?cè)跀?shù)據(jù)清洗過程中處理的列非常相關(guān),這里我們直接采用上一步最后形成的新數(shù)據(jù)da

第三步:我們?cè)谠加?xùn)練數(shù)據(jù)中有891行,選取特征和標(biāo)簽,然后對(duì)這個(gè)數(shù)據(jù)進(jìn)行拆分訓(xùn)練集和測(cè)試集,
#將原始數(shù)據(jù)集拆分為訓(xùn)練集合評(píng)估集
sourceRow = 891
source_X  = da.loc[0:sourceRow-1,:]
source_X = source_X.drop(["Survived"],axis  =1)
source_y  =da.loc[0:sourceRow-1,"Survived"]

#拆分訓(xùn)練集和測(cè)試集
train_X,test_X,train_y,test_y = train_test_split(source_X,source_y,train_size=0.8)

#輸出數(shù)據(jù)集大小
# print("原始數(shù)據(jù)集特征:",source_X.shape)
# print("訓(xùn)練集特征:",train_X.shape)
# print("測(cè)試集特征:",test_X.shape)
# print("原始數(shù)據(jù)集標(biāo)簽:",source_y.shape)
# print("訓(xùn)練數(shù)據(jù)集標(biāo)簽:",train_y.shape)
# print("測(cè)試數(shù)據(jù)集標(biāo)簽:",test_y.shape)
第四步是導(dǎo)入算法,訓(xùn)練模型:

導(dǎo)入訓(xùn)練數(shù)據(jù)的特征train_X712條,包括性別,頭銜等,導(dǎo)入標(biāo)簽train_y712條生存狀況,得到正確率0.87:

#使用邏輯回歸模型
model = LogisticRegression()
#使用數(shù)據(jù),訓(xùn)練模型
model.fit(train_X,train_y)
# print(model.fit(train_X,train_y))
# print(model.score(test_X,test_y))
第五步:方案實(shí)施

用機(jī)器學(xué)習(xí)模型,對(duì)預(yù)測(cè)數(shù)據(jù)集中的生存情況進(jìn)行預(yù)測(cè),這里用乘客的ID,數(shù)據(jù)框Df保存預(yù)測(cè)情況的值。

#方案實(shí)施,對(duì)預(yù)測(cè)數(shù)據(jù)集中的數(shù)據(jù)進(jìn)行預(yù)測(cè)
predict_X = da.loc[sourceRow:,:]
predict_X = da.drop(["Survived"],axis=1)
pred_Y = model.predict(predict_X)
pred_Y = pred_Y.astype(int)  
#乘客ID
passenger_id = da.loc[sourceRow,"PassengerId"]
predDf = pd.DataFrame({"PassengerId":passenger_id,"Survived":pred_Y})
print(predDf.shape)
print(predDf)
  

最后附上源碼:鏈接:https://pan.baidu.com/s/1cb60... 密碼:y12u。
有興趣的可以在閱讀本文點(diǎn)贊,歡迎評(píng)論哦!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/61952.html

相關(guān)文章

  • 機(jī)器學(xué)習(xí)入門實(shí)戰(zhàn)---預(yù)測(cè)泰坦尼克號(hào)生存熟悉機(jī)器學(xué)習(xí)基礎(chǔ)知識(shí)

    摘要:背景知識(shí)泰坦尼克號(hào)年月從英國(guó)南安普頓出發(fā),途徑法國(guó),愛爾蘭在美國(guó)大西洋碰觸冰山沉沒,一部分人幸免于難,一部分人沒有生存,這個(gè)案例中就是要通過機(jī)器學(xué)習(xí)的算法來預(yù)測(cè)一下中人的生存狀況。 背景知識(shí): 泰坦尼克號(hào)1912年4月從英國(guó)南安普頓出發(fā),途徑法國(guó),愛爾蘭在美國(guó)大西洋碰觸冰山沉沒,一部分人幸免于難,一部分人沒有生存,這個(gè)案例中就是要通過機(jī)器學(xué)習(xí)的算法來預(yù)測(cè)一下test.csv中418人的...

    blair 評(píng)論0 收藏0
  • 重磅!Uber發(fā)布史上最簡(jiǎn)單深度學(xué)習(xí)框架Ludwig!

    摘要:通用性一種新的基于數(shù)據(jù)類型的深度學(xué)習(xí)模型設(shè)計(jì)方法,使該工具可以跨許多不同的應(yīng)用領(lǐng)域使用。可理解性深度學(xué)習(xí)模型內(nèi)部通常被認(rèn)為是黑匣子,但是該庫提供標(biāo)準(zhǔn)的可視化來理解它們的性能并比較它們的預(yù)測(cè)。 昨日,Uber官網(wǎng)重磅宣布新開源深度學(xué)習(xí)框架Ludwig,不需要懂編程知識(shí),讓專家能用的更順手,讓非專業(yè)人士也可以玩轉(zhuǎn)人工智能,堪稱史上最簡(jiǎn)單的深度學(xué)習(xí)框架!Ludwig是一個(gè)建立在TensorFlow...

    zhichangterry 評(píng)論0 收藏0
  • ??蘇州程序大白一文從基礎(chǔ)手把手教你Python數(shù)據(jù)可視化大佬??《??記得收藏??》

    ??蘇州程序大白一文從基礎(chǔ)手把手教你Python數(shù)據(jù)可視化大佬??《??記得收藏??》 目錄 ????開講啦!!!!????蘇州程序大白?????博主介紹前言數(shù)據(jù)關(guān)系可視化散點(diǎn)圖 Scatter plots折線圖強(qiáng)調(diào)連續(xù)性 Emphasizing continuity with line plots同時(shí)顯示多了圖表 數(shù)據(jù)種類的可視化 Plotting with categorical da...

    Drinkey 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<