首先了解幾個機器學(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ù)
需要了解的問題:
- 學(xué)習(xí)的目標(biāo)是什么?監(jiān)督還是非監(jiān)督?是六大任務(wù)的哪一類?
目標(biāo):預(yù)測乘客是否生還;監(jiān)督學(xué)習(xí) ;分類問題。 - 每一個字段的含義
- 每一個字段的變量類型:數(shù)值型還是類別型
類別型的數(shù)據(jù),不同的數(shù)據(jù)之間距離都是1,可以用獨熱編碼 - 數(shù)據(jù)規(guī)模 多少行多少列
- 數(shù)據(jù)質(zhì)量 有多少缺失數(shù)據(jù) 多少重復(fù)數(shù)據(jù)
導(dǎo)入數(shù)據(jù)并對數(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ù)分析都沒有什么影響,處理掉

3. 單變量數(shù)據(jù)探索
每次只對一個變量進行分析,方便后續(xù)數(shù)據(jù)預(yù)處理,常用的單變量數(shù)據(jù)處理方式有:
頻數(shù)分析:適用于類別型變量;直方圖;描述性統(tǒng)計
4. 多變量數(shù)據(jù)探索
即同時探索多個變量間的相關(guān)關(guān)系
散點圖、交叉表、堆棧條圖、分類匯總
二、數(shù)據(jù)預(yù)處理
需要進行的處理:
- 對缺失值進行處理
- 對類別型變量進行重新編碼
- 對連續(xù)變量進行分箱,然后再按處理類別型數(shù)據(jù)的方式重新編碼
- 對連續(xù)型變量進行標(biāo)準(zhǔn)化和歸一化處理
PS. 不同算法和問題,對數(shù)據(jù)集的預(yù)處理要求并不一樣:
- 缺失值對所有算法來說基本上都要處理
- 連續(xù)型變量是否分箱具體看算法,決策樹不需要
- 標(biāo)準(zhǔn)化和歸一化在涉及到計算距離計算的算法中一定要處理
1. 缺失值處理
常見的缺失值處理有三種方法:
- 簡單粗暴,直接把有缺失值的數(shù)據(jù)刪除,如果數(shù)據(jù)集很大而缺失值又不多的話可以
- 構(gòu)造一個新變量來標(biāo)記缺失值,缺失標(biāo)記為1,不確失標(biāo)記為0。這種方法認(rèn)為缺失值是一個有意義的信息,不能簡單處理掉。
- 用一個值替換掉缺失值,具體如何替換方法多樣,比如數(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ù)值