案例1-Digit-Recognizer

搬運來的步驟

一. 數據分析

  1. 下載並加載數據
  2. 總體預覽數據:瞭解每列數據的含義,數據的格式等
  3. 數據初步分析,使用統計學與繪圖: 由於特徵沒有特殊的含義,不需要過多的細緻分析

二. 特徵工程
1.根據業務,常識,以及第二步的數據分析構造特徵工程.
2.將特徵轉換爲模型可以辨別的類型(如處理缺失值,處理文本進行等)

三. 模型選擇
1.根據目標函數確定學習類型,是無監督學習還是監督學習,是分類問題還是迴歸問題等.
2.比較各個模型的分數,然後取效果較好的模型作爲基礎模型.

四. 模型融合
跳過,這個項目的重點是讓大家都瞭解這個kaggle比賽怎麼和算法更好的融合在一起。

五. 修改特徵和模型參數
此處不做過多分析,主要是優化各個算法的參數。

  • KNN => k值
  • SVM => 懲罰係數,核函數
  • RF => 樹個數,樹深度,葉子數
  • PCA => 特徵數 or 信息熵

數據分析

加載數據,劃分數據集,分離標籤
用pandas加載csv文件,MNIST數據集

train_data = pd.read_csv(train_data_file)
test_data = pd.read_csv(test_data_file)
sample_submission = pd.read_csv(sample_submission_file)
print(train_data.info())
print(test_data.info())

輸出:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 42000 entries, 0 to 41999
Columns: 785 entries, label to pixel783
dtypes: int64(785)
memory usage: 251.5 MB
None
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 28000 entries, 0 to 27999
Columns: 784 entries, pixel0 to pixel783
dtypes: int64(784)
memory usage: 167.5 MB
None

特徵工程

我去學一下PCA再來

我已經精通PCA了: PCA降維的原理及實現

模型選擇

  • 根據目標函數確定學習類型,是無監督學習還是監督學習,是分類問題還是迴歸問題等.
  • 比較各個模型的分數,然後取效果較好的模型作爲基礎模型.

對於本項目:

  • 分類問題:0~9 數字
  • 常用算法:knn、決策樹、樸素貝葉斯、Logistic迴歸、SVM、集成方法(隨機森林和 AdaBoost)(尼瑪還有好多不會)

KNN

至此我終於體會到了機器學習所需要的巨大計算量。我到處吹牛的 i7-9750H 用上所有計算資源後 predict一下就花了半小時。。這誰頂得住。

# 感覺這個用KNN應該超簡單,試一下
from sklearn import neighbors

knn = neighbors.KNeighborsClassifier(n_neighbors=10, n_jobs=-1)
knn.fit(train_set, train_label)

網格搜索,KNN的參數:

neighbors.KNeighborsClassifier(n_neighbors=5, weights=‘uniform’, algorithm=‘auto’, leaf_size=30,
p=2, metric=‘minkowski’, metric_params=None, n_jobs=1, **kwargs)

構造一個參數

grid_param= [{
    "weights": ["uniform"],
    "n_neighbors": [i for i in range(1, 11)] 
},{
    "weights":["distance"],
    "n_neighbors": [i for i in range(1, 11)],
    "p": [1, 6]
}]

使用GridSearchCV訓練:

from sklearn.model_selection import GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier()
grid = GridSearchCV(knn, grid_param, n_jobs=-1, verbose=2)
grid.fit(X_train_reduction, y_train)
# 最優參數
grid.best_params_
# 最優分類器
knn_clf = grid.best_estimator_

SVM

這個我會了

# svm 我也會了,哈哈哈
# 用高斯核函數試一下
# 10分鐘過去了。。
# 40分鐘過去了
# 最終時間:Wall time: 2h 40min 53s
from sklearn.svm import SVC

rbf_svc = SVC(kernel="rbf",cache_size= 4096, gamma=1)
%time rbf_svc.fit(train_set, train_label)

使用pca降維後的數據:

# Wall time: 9min 36s
svc = SVC(kernel="rbf", cache_size=4096)
%time svc.fit(X_train_reduction, y_train)

RF(不會)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章