【SAS】SASで実装できる機械学習
まとめ用。随時更新。
教師あり学習
最小二乗回帰(OLS:Ordinary Least Squares regression、線形回帰)
【プロシジャ】HPREG, GLMSELECT, HPGENSELECT(dist=gaussian)
【SAS】glmselectプロシジャ_Lasso回帰、ElasticNet回帰 - こちにぃるの日記
(例:10-fold ElasticNet回帰)
ods graphics on;
proc glmselect data=訓練データ plots=all seed=19;
model ラベル = 特徴量1, ..., 特徴量p
/ details=all stats=all
selection=elasticnet(choose=cv l2search=grid showl2search stop=none) cvmethod=random(10) stb;
score out=score_elasticnet predicted residual;
code file="ファイル名.sas";
run;
ods graphics off;
*-- 予測;
data _Pred;
set 予測データ;
%inc "ファイル名.sas"; *-- 新しいデータで予測;
run;
ロジスティック回帰(Logistic regression)
【プロシジャ】HPLOGISTIC, HPGENSELECT(dist=binary link=logit)
【SAS】hpgenselect プロシジャ_罰則付きロジスティック回帰(LASSO) - こちにぃるの日記
(例:Logistic regression with Lasso)
proc hpgenselect data=訓練データ lassorho=0.8 lassosteps=20;
partition roleVar=selected(train='0' validate='1');
model ラベル(event="1")=特徴量1, ..., 特徴量p / distribution=binary link=logit;
selection method=lasso(choose=validate stop=none) details=all;
performance details;
code file="ファイル名.sas" residual; *-- 予測用のPGM生成;
ods output ParameterEstimates=_Coef_lasso; *-- 回帰係数;
output data=_Pred_lasso role=ROLE pred=PRED resid=RESID;
run;
*-- 予測;
data _Pred;
set 予測データ;
%inc "ファイル名.sas"; *-- 新しいデータで予測;
run;
四分位回帰(Quantile regression)
【プロシジャ】HPQUANTSELECT
サポートベクターマシーン(SVM: Support vector machine)
【プロシジャ】HPSVM
【SAS】hpsvmプロシジャ_サポートベクターマシーン - こちにぃるの日記
proc hpsvm data = 訓練データ;
target ラベル / order = 順序 level = 変数のタイプ;
input 名義尺度の特徴量 / level=nominal;
input 順序尺度の特徴量 / level=ordinal order=ascending;
input 間隔尺度の特徴量 / level=interval;
code file = "ファイル名.sas" ; /* 将来データ用に予測アルゴリズム出力 */
run;
*-- 予測 ;
data _Pred;
set 予測データ;
%inc "ファイル名.sas"; *-- 新しいデータで予測;
run;
決定木(Decision tree)
【プロシジャ】HPSPLIT
proc hpsplit data=train;
class ラベル カテゴリの特徴量 ;
model ラベル(event="1") = 特徴量1, ..., 特徴量p ;
partition roleVar=selected(valid='0' train='1');
prune costcomplexity;
code file= "ファイル名.sas" ; /* 将来データ用に予測アルゴリズム出力 */
output out=_SCORE;
run;
*-- 予測 ;
data _Pred;
set 予測データ;
%inc "ファイル名.sas"; *-- 新しいデータで予測;
run;
ランダムフォレスト(Random Forest)
【プロシジャ】HPFOREST
【SAS】hpforestプロシジャ_ランダムフォレスト - こちにぃるの日記
proc hpforest data = 訓練データ seed = 19 scoreprole = valid
maxtrees = 100 /* pythonではn_estimators */
maxdepth = 6 /* pythonではmax_depth */
;
partition roleVar=selected(train='0' valid='1');
performance details;
target ラベル / order = 順序 level = 変数のタイプ;
input 名義尺度の特徴量 / level=nominal;
input 順序尺度の特徴量 / level=ordinal order=ascending;
input 間隔尺度の特徴量 / level=interval;
ods output FitStatistics = _Res_FitStatistics; /* 予測値の出力 */
ods output VariableImportance = _Res_VariableImportance; /* 変数重要度(特徴量重要度)の出力 */
save file = "hpforest_fit.bin"; /* 将来データ用に予測アルゴリズム出力 */
run;
*-- 予測 ;
proc hp4score data = 予測データ;
score file="ファイル名.bin" out=_Pred_RandomForest;
id 表示したい特徴量;
run;
勾配ブースティング木(Gradient Boosting Tree)
【プロシジャ】TREEBOOST
【SAS】treeboostプロシジャ_Gradient Boosting Tree(勾配ブースティング木) - こちにぃるの日記
proc treeboost data=訓練データ(where=(selected=0))
iterations = 1000 /* pythonではn_estimators */
maxdepth = 6 /* pythonではmax_depth */
seed = 19
;
target ラベル / order = 順序 level = 変数のタイプ;
input 名義尺度の特徴量 / level=nominal;
input 順序尺度の特徴量 / level=ordinal order=ascending;
input 間隔尺度の特徴量 / level=interval;
assess validata = valid_dataset;
subseries best;
code file="ファイル名.sas";
save fit=_gb_fit importance=_gb_importance; /* 予測値と特徴量重要度 */
quit;
run;
*-- 予測;
data _Pred;
set 予測データ;
%inc "ファイル名.sas"; *-- 新しいデータで予測;
run;
k近傍法(k-NN: k-nearest neighbor algorithm)
【プロシジャ】
教師なし学習
主成分分析(PCA: principal component analysis)
【プロシジャ】
k-means法
【プロシジャ】