Kaggle与机器学习流程
機(jī)器學(xué)習(xí)解決問題的流程:
http://blog.csdn.net/han_xiaoyang/article/details/50469334
https://www.linkedin.com/pulse/approaching-almost-any-machine-learning-problem-abhishek-thakur/
xgboost:https://github.com/dmlc/xgboost,https://blog.csdn.net/qq_24519677/article/details/81809157
--------------------------------------------------------------
sklearn中文文檔:http://scikitlearn.com.cn/
大數(shù)據(jù)的降維處理:PCA、random_project、t-SNE
特征工程
1. 數(shù)據(jù)預(yù)處理:http://scikitlearn.com.cn/0.21.3/40/
(1) 將數(shù)值型特征離散化:
(2) 將類別特征轉(zhuǎn)化為編碼:from sklearn.preprocessing import LabelEncoder, OneHotEncoder,在使用OneHotEncoder之前先用LabelEncoder把類別轉(zhuǎn)化為數(shù)字
(3) 特征抽取(對(duì)文本類型):http://scikitlearn.com.cn/0.21.3/39/
將文本特征抽取特征:文本變量可以變成這種形式:text_data = list(X_train.apply(lambda x:'%s %s' % (x['column_1'], x['column_2']), axis=1))。from sklearn.feature_extraction import CountVectorizer, TfidfVectorizer,TfidfVectorizer比CountVectorizer要好
將文本轉(zhuǎn)化為稀疏矩陣之后,進(jìn)行奇異值分解,from sklearn.decomposition import TruncatedSVD(n_components=12)
2. 將特征組合在一起
(1)簡(jiǎn)單的組合(用于特征少)
稠密的特征用 X = np.hstack((x1, x2, ...))
稀疏的特征用from scipy import sparse || X = sparse.hstack((x1, x2, ...))
(2)復(fù)雜的組合(用于特征多,降維)
from sklearn.pipeline import FeatureUnion
from sklearn.decomposition import PCA
from sklearn.feature_selection import SelectKBest
pca = PCA(n_components=10)【對(duì)于圖像,從10-15個(gè)組件開始;對(duì)于其他類型數(shù)據(jù),從50-60開始;只要算力足夠,都不建議降維】
skb = SelectKBest(k=1)
combined_features = FeatureUnion([('pca', pca),('skb', skb)])
3. 高維數(shù)據(jù)處理:PCA、SVD、LDA、QDA
4.特征選擇
http://scikitlearn.com.cn/0.21.3/14/
(1) 隨機(jī)森林進(jìn)行特征選擇
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=100, n_jobs=-1)
clf.fit(X, y)
X_selected = clf.transform(X)
(2) 利用Gradient Boosting也可以特征選擇,XGBoost也可以,可以對(duì)稀疏數(shù)據(jù)集進(jìn)行特征選擇
(3) 從正稀疏數(shù)據(jù)集中基于ch-2的特征選擇
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
skb = SelectKBest(chi2, k=20)
skb.fit_transform(X, y)
模型選擇:
?? ?過(guò)擬合:驗(yàn)證分?jǐn)?shù)比訓(xùn)練分?jǐn)?shù)低很多
?? ?剛好擬合:驗(yàn)證分?jǐn)?shù)和訓(xùn)練分?jǐn)?shù)差不多,且分?jǐn)?shù)都比較高
?? ?欠擬合:驗(yàn)證分?jǐn)?shù)和訓(xùn)練分?jǐn)?shù)差不多,且分?jǐn)?shù)都很低
1. 不能隨便將特征用在線性模型上,因?yàn)樘卣鞑皇菢?biāo)準(zhǔn)化的??梢詫⑻卣鬟M(jìn)行標(biāo)準(zhǔn)化
(1) 稀疏特征
使用StandardScaler,WITE_MEST設(shè)置為False(無(wú)需使用平均值)
(2) 稠密特征
歸一化
2. 可以隨便將特征用在樹模型等非線性模型上
使用全局?jǐn)?shù)據(jù)時(shí):交叉驗(yàn)證:http://scikitlearn.com.cn/0.21.3/30/,對(duì)于分類問題,用from sklearn.cross_validation import StratfiedKFold;對(duì)于回歸問題,用from sklearn.cross_validation import KFold
使用batch數(shù)據(jù)時(shí):使用progressive validation,對(duì)同一個(gè)batch,訓(xùn)練前驗(yàn)證一次成績(jī)?yōu)関alid_score,訓(xùn)練后驗(yàn)證一次成績(jī)?yōu)閠rain_score。比如:第99次訓(xùn)練后,batch用第99次訓(xùn)練得出的模型得分train_score正常,然后到100次訓(xùn)練時(shí),new_batch用第99次訓(xùn)練得出的模型得分比train_score低很多,則過(guò)擬合了
模型超參數(shù)選擇:(GridSearch)
交叉驗(yàn)證:http://scikitlearn.com.cn/0.21.3/31/
模型狀態(tài)評(píng)估:
繪制學(xué)習(xí)曲線:http://www.zybuluo.com/hanxiaoyang/note/545131
模型融合:(bagging、boosting)
http://scikitlearn.com.cn/0.21.3/12/
總結(jié)
以上是生活随笔為你收集整理的Kaggle与机器学习流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 断网检测
- 下一篇: python dns管理平台_pytho