機器學(xué)習(xí)第一次嘗試

首先了解幾個機器學(xué)習(xí)中常見的術(shù)語的意義
一個機器學(xué)習(xí)模型的質(zhì)量問題,從對訓(xùn)練集樣本擬合程度的角度,可以分為欠擬合(Underfitting)和過擬合(Overfitting)

數(shù)據(jù)的準(zhǔn)備和處理

機器學(xué)習(xí)所做的第一件事就是理解數(shù)據(jù),人工智能工作者80%的時間花在:
對數(shù)據(jù)的獲取、清洗、轉(zhuǎn)換與處理、特征工程的提取上。數(shù)據(jù)決定模型的上限

泰坦尼克號幸存者數(shù)據(jù)建模分析

著名數(shù)據(jù)科學(xué)競賽平臺Kaggle提供了一個非常適合初學(xué)者學(xué)習(xí)練手的項目,該數(shù)據(jù)集提供了891名泰坦尼克號的乘客數(shù)據(jù),包括乘客姓名、年齡、客艙等級等信息;及目標(biāo)數(shù)據(jù)即乘客是否生還。

接下來我么就用這個數(shù)據(jù)集進行建模分析

一. 理解數(shù)據(jù)

需要了解的問題:

  1. 學(xué)習(xí)的目標(biāo)是什么?監(jiān)督還是非監(jiān)督?是六大任務(wù)的哪一類?
    目標(biāo):預(yù)測乘客是否生還;監(jiān)督學(xué)習(xí) ;分類問題。
  2. 每一個字段的含義
  3. 每一個字段的變量類型:數(shù)值型還是類別型
    類別型的數(shù)據(jù),不同的數(shù)據(jù)之間距離都是1,可以用獨熱編碼
  4. 數(shù)據(jù)規(guī)模 多少行多少列
  5. 數(shù)據(jù)質(zhì)量 有多少缺失數(shù)據(jù) 多少重復(fù)數(shù)據(jù)

導(dǎo)入數(shù)據(jù)并對數(shù)據(jù)進行觀察:


訓(xùn)練集數(shù)據(jù)

數(shù)據(jù)共有12個字段

PassengerId Pclass Name Sex Age SibSp
乘客ID 倉位等級 姓名 性別 年齡 在船上兄弟姐妹配偶數(shù)
Survived Ticket Fare Cabin Embarked Parch
是否幸存 船票編號 船票價格 客艙號 登船港口 在船上父母子女?dāng)?shù)

查看數(shù)據(jù)集信息:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId    891 non-null int64
Survived       891 non-null int64
Pclass         891 non-null int64
Name           891 non-null object
Sex            891 non-null object
Age            714 non-null float64
SibSp          891 non-null int64
Parch          891 non-null int64
Ticket         891 non-null object
Fare           891 non-null float64
Cabin          204 non-null object
Embarked       889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB

1.觀察數(shù)據(jù)發(fā)現(xiàn):

Name Sex Ticket Embarked字段是字符類型,其余為數(shù)值類型
Age Cabin Embarked 字段有缺失值

2.找出對預(yù)測沒有意義的列并刪除

PassengerID Name Ticket 這些對數(shù)據(jù)分析都沒有什么影響,處理掉


刪除無用列后的數(shù)據(jù)

3. 單變量數(shù)據(jù)探索

每次只對一個變量進行分析,方便后續(xù)數(shù)據(jù)預(yù)處理,常用的單變量數(shù)據(jù)處理方式有:
頻數(shù)分析:適用于類別型變量;直方圖;描述性統(tǒng)計

4. 多變量數(shù)據(jù)探索

即同時探索多個變量間的相關(guān)關(guān)系
散點圖、交叉表、堆棧條圖、分類匯總

二、數(shù)據(jù)預(yù)處理

需要進行的處理:

  1. 對缺失值進行處理
  2. 對類別型變量進行重新編碼
  3. 對連續(xù)變量進行分箱,然后再按處理類別型數(shù)據(jù)的方式重新編碼
  4. 對連續(xù)型變量進行標(biāo)準(zhǔn)化和歸一化處理

PS. 不同算法和問題,對數(shù)據(jù)集的預(yù)處理要求并不一樣:

  1. 缺失值對所有算法來說基本上都要處理
  2. 連續(xù)型變量是否分箱具體看算法,決策樹不需要
  3. 標(biāo)準(zhǔn)化和歸一化在涉及到計算距離計算的算法中一定要處理

1. 缺失值處理

常見的缺失值處理有三種方法:

  1. 簡單粗暴,直接把有缺失值的數(shù)據(jù)刪除,如果數(shù)據(jù)集很大而缺失值又不多的話可以
  2. 構(gòu)造一個新變量來標(biāo)記缺失值,缺失標(biāo)記為1,不確失標(biāo)記為0。這種方法認(rèn)為缺失值是一個有意義的信息,不能簡單處理掉。
  3. 用一個值替換掉缺失值,具體如何替換方法多樣,比如數(shù)值類型的可以考慮用均值替換,類別類型變量用眾數(shù)替換

在這個數(shù)據(jù)集中如果直接刪掉有缺失值的行,原本的891條數(shù)據(jù)就只剩183條了,所以考慮用構(gòu)造變量的方式處理缺失值。

# 構(gòu)造一個新變量 AgeIsMissing
titanic_df['AgeIsMissing'] = 0
titanic_df.loc[titanic_df['Age'].isnull(), 'AgeIsMissing'] = 1
# 對 Age 缺失值進行均值填充
age_mean = round(titanic_df['Age'].mean())

2. 類別變量重新編碼

目的:機器學(xué)習(xí)要求輸入的變量必須是數(shù)值

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容