MLb-018 61『Python機械学習基礎教程』まとめ(下)
このシリーズの文章は《Python機械学習基礎教程》の最も核心的な要点を精錬します
1.One-Hot符号化(仮想変数))文字列符号化の分類データ(異なるが同じ意味を示すデータがある可能性がある:man、maleなど) をチェックする.2)getを利用するdummies関数自動変換文字列と分類カラム 3)values属性でDataFrameをNumpy配列 に変換する.4)注意:トレーニングとテストデータを同時に含むデータセットでget_を呼び出すdummies
2、デジタルコードの分類変数をOneHotEncoderまたは置換時に文字列に変換する
1、具体的な操作
2、特徴1つの箱内のすべての点、いかなるモデルも同じ値の箱分け特徴を予測して線形モデルの性能を高め、決定木モデルの精度を下げる
1、ボックスを使用して連続特徴を拡張する1)元の特徴(ボックスデータ上の線形モデルへの傾きの追加:図中のx軸) を再追加する.2)インタラクティブフィーチャーまたは積フィーチャー(各箱に異なる傾きがある) を追加する.
2、元の特徴を用いた多項式1)具体的な操作 2)多項式回帰モデル(多項式特徴は線形回帰とともに用いる)
logおよびexp関数は、パラメータがデータの相対的な割合を調整し、線形モデルまたはニューラルネットワークの学習効果を改善するのに役立つ.
使用シヨウ:フィーチャーとターゲットの間に非線形関係がある
1、特徴選択の原因を概説する:多すぎる特徴はモデルをより複雑に特徴作用の大きさを判断する基本戦略:単変数統計、モデルに基づく選択、反復選択(いずれも監督方法)2、単変数統計1)概念操作:各特徴と目標値の関係に統計的有意性があるかどうかを計算し、最も信頼性の高い特徴(分類問題-分散分析)使用閾値:SelectKBest(固定個数kの特徴を選択)、SelectPercentile(固定パーセントの特徴を選択) を選択する.2)具体的な操作 3)ビジュアル化テクニック 3、モデルに基づく特徴選択1)概念は1つの監督学習モデルを用いて各特徴の重要性を判断する特徴で選択された監督モデルは必ずしも最終監督モデルと同じではなく単変数選択とは異なり、モデルの選択に基づいてすべての特徴(インタラクティブアイテムを取得可能) を同時に考慮する.2)具体的な操作 A.100本の木を含むランダム森林分類器を用いて特徴的重要性 を計算する. B.実フィットモデル C.性能 を見る.
4、反復フィーチャー選択1)概念は一連のモデルを構築し、各モデルは異なる数の特徴方法を使用する:逐一追加または逐一削除(再帰的特徴除去、RFE) 2)具体的な操作 A.構築モデル B.パフォーマンスの表示
1、クロス検証の概要:汎化性能を評価する統計学的方法.データセットは複数回分割され、複数のモデルを訓練する必要がある利点:複数回分割:モデルの訓練セット選択に対する感度の欠点がわかる:計算コストの増加目的:特定のデータセット上で所定のアルゴリズムを訓練した後の汎化性能を評価する(新しいデータモデルを構築する方法ではない)
2、基本操作(k折交差検証)
3、階層kの折り返し交差検証(各折り返しカテゴリの割合はデータセット全体の割合と同じ)1)kfoldクロス検証分離器(cvパラメータとして使用可能) 2) . 3)乱交検証 4)パケット交差検証(顔の表情認識のようなデータパケットの高さ相関に適用され、新しい人に広がりたい) .
1、概要目的:最適な汎化性能を提供するモデルのパラメータを見つけて簡単なプログラミング実現
2、パラメータのオーバーフィットリスクを低減する——検証セット1)2回の区分 2)コアコードの改良:モデル を検証セット上で評価する)サイクル終了後:トレーニング+検証セットでモデルを再構築し、テストセットで を評価する
3、クロス検証付きメッシュ検索1)コアコードの改良:クロス検証を実行し、平均精度 を計算する.2)sklearnの推定器 を利用する.)分析結果 4)非メッシュ検索:param_gridは辞書からなるリスト に変更することができる.
1、回帰指標:デフォルトのR^2を使用する(すべての回帰器のscore方法で与える)
2、不平和データセット:一つのクラスが圧倒的多数を占める
3、二分類指標)混同行列 2)評価指標 A.精度:正例における真の正例の割合 B.リコール率:真の正例は正例の割合 と予測される. C.F 1スコア:精度とリコール率の調和平均 D.ドラフトレポート E.描画精度-リコール率曲線 F.合計曲線:平均精度(曲線積分面積、戻り浮動小数点数) G.ROC曲線(被験者作動特性曲線、偽正例率および真例率) H.総括曲線:曲線下面積(AUC、戻り浮動小数点数)
4、多分類指標1)多分類指標の混同行列 2)アンバランスデータセット:f-スコア(多分類バージョン) 各カテゴリに対して1つの2分類f-スコア(他のすべてのカテゴリは逆クラス) を計算する次のポリシーを使用して、カテゴリ別のfスコアを平均します. マクロ平均:サンプルサイズ に関係なく、すべてのカテゴリに同じ重みが与えられます.加重平均:各カテゴリのサポートは重みとしてカテゴリf-スコア平均 を計算する.マイクロ平均:全カテゴリにおけるFP、FN、TPの総数を算出し、精度、リコール率、f-スコア を算出する.
使用方法 は各サンプルに対して同等に見る:微小平均f-分数 各カテゴリを同等に扱う:マクロ平均f-スコア
5、モデル選択における評価指標の使用目的:GridSearchCVまたはcross_を使用val_scoreモデル選択にAUCなどの指標 を用いる.メソッド:scoringパラメータ クロス検証 グリッド検索 でよく使われるのはscoringパラメータです 分類問題 精度(accuracy) ROC曲線下面積(roc_auc) 精度-回収率曲線下面積(average_precision) の4つの二分類f 1スコアおよび重み付け変異体(f 1,f 1_macro,f 1_micro,f 1_weighted) .
回帰問題 R^2スコア(r 2) 平均二乗誤差(mean_squared_error) 平均絶対誤差(mean_absolute_error)
データ区分:トレーニングセット-トレーニングモデル;検証セット-モデルとパラメータを選択します.テストセット-モデル評価機械学習の最終目的を明確にする:モデル評価と選択の指標がモデルの実際の用途によく代わることを確保する
導入:任意の前処理を行う前にデータセットの分割を完了する(処理プロセスの最外層サイクルに位置するクロス検証) . Pipelineクラスは、fit、predict、scoreメソッドを持つ単一の推定器自体に対して複数の処理ステップを統合する最も一般的な方法である:前処理ステップ(スケールなど)を分類器などの監視モデルと接続する .
1、make_を使うpipelineはパイプを簡単に作成できます
2、namedを利用するStepアクセスステッププロパティ
3、アクセスメッシュ検索パイプの属性
1、目的:監督タスクの出力で前処理パラメータを調整する
2、Tips:ホットグラフでクロス検証結果を可視化
3、最適モデルと対応点数の表示
検索メッシュリストを使用して、random forestが前処理を必要としないなどのステップをスキップするとNoneに設定されます.
メッシュはこのように定義され、残りは同じです.
第四章データ表示と特徴工程
一、分類変数
1.One-Hot符号化(仮想変数)
print(data.gender.value_counts())
data_dummies=pd.get_dummies(data)
features = data_dummies.loc[:, 'feature_1':'feature_k']
X = features.values
y = data_dummies['target_1'].values
# target , 0、1
2、デジタルコードの分類変数をOneHotEncoderまたは置換時に文字列に変換する
demo_df['Integer Feature'] = demo_df['Integer Feature'].astype(str)
二、分箱、離散化、線形モデルとツリー
1、具体的な操作
bins = np.linspace(-3, 3, 11)
# -3 3 10
which_bin = np.digitize(X, bins=bins)
#
2、特徴1つの箱内のすべての点、いかなるモデルも同じ値の箱分け特徴を予測して線形モデルの性能を高め、決定木モデルの精度を下げる
三、インタラクティブ特徴と多項式特徴
1、ボックスを使用して連続特徴を拡張する
X_combined = np.hstack([X, X_binned])
reg = LinearRegression().fit(X_combined, y)
line_combined = np.hstack([line, line_binned])
reg.predict(line_combined)
X_product = np.hstack([X_binned,X* X_binned])
reg = LinearRegression().fit(X_product, y)
line_product = np.hstack([line_binned, line*line_binned])
reg.predict(line_product)
2、元の特徴を用いた多項式
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=10, include_bias=False)
# x**10 ,include_bias False
poly.fit(X)
X_poly = poly.transform(X)
poly.get_feature_names()
#
reg = LinearRegression().fit(X_poly, y)
line_poly = poly.transform(line)
reg.predict(line_poly)
四、単変数非線形変換
logおよびexp関数は、パラメータがデータの相対的な割合を調整し、線形モデルまたはニューラルネットワークの学習効果を改善するのに役立つ.
X_train_log=np.log(X_train)
X_train_exp=np.exp(X_train)
使用シヨウ:フィーチャーとターゲットの間に非線形関係がある
五、自動化特徴選択
1、特徴選択の原因を概説する:多すぎる特徴はモデルをより複雑に特徴作用の大きさを判断する基本戦略:単変数統計、モデルに基づく選択、反復選択(いずれも監督方法)2、単変数統計
from sklearn.feature_selection import SelectPercentile
select = SelectPercentile(percentile=50)
# 50%
select.fit(X_train, y_train)
X_train_selected = select.transform(X_train)
mask = select.get_support()
# get_support
print(mask)
plt.matshow(mask.reshape(1, -1), cmap='gray_r')
# , True, False
plt.xlabel("Sample index")
plt.yticks(())
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier
select = SelectFromModel(RandomForestClassifier(n_estimators=100, random_state=42),threshold="median")
select.fit(X_train, y_train)
X_train_l1 = select.transform(X_train)
X_test_l1 = select.transform(X_test)
score = LogisticRegression().fit(X_train_l1, y_train).score(X_test_l1, y_test)
print("Test score: {:.3f}".format(score))
4、反復フィーチャー選択
from sklearn.feature_selection import RFE
select = RFE(RandomForestClassifier(n_estimators=100, random_state=42),n_features_to_select=40)
select.fit(X_train, y_train)
X_train_rfe = select.transform(X_train)
X_test_rfe = select.transform(X_test)
score = LogisticRegression().fit(X_train_rfe, y_train).score(X_test_rfe, y_test)
print("Test score: {:.3f}".format(score))
六、専門家の知識を利用する
第五章モデル評価と改善
一、クロス検証
1、クロス検証の概要:汎化性能を評価する統計学的方法.データセットは複数回分割され、複数のモデルを訓練する必要がある利点:複数回分割:モデルの訓練セット選択に対する感度の欠点がわかる:計算コストの増加目的:特定のデータセット上で所定のアルゴリズムを訓練した後の汎化性能を評価する(新しいデータモデルを構築する方法ではない)
2、基本操作(k折交差検証)
from sklearn.model_selection import cross_val_score
logreg = LogisticRegression()
scores = cross_val_score(logreg, iris.data, iris.target, cv=5)
#cv:
print("Cross-validation scores: {}".format(scores))
3、階層kの折り返し交差検証(各折り返しカテゴリの割合はデータセット全体の割合と同じ)
from sklearn.model_selection import KFold
kfold = KFold(n_splits=3, shuffle=True, random_state=0)
#shuffle: ( ,random_state )
print("Cross-validation scores:
{}".format(cross_val_score(logreg, iris.data, iris.target, cv=kfold)))
from sklearn.model_selection import LeaveOneOut
loo = LeaveOneOut()
scores = cross_val_score(logreg, iris.data, iris.target, cv=loo)
# , , ,
print("Number of cv iterations: ", len(scores))
print("Mean accuracy: {:.2f}".format(scores.mean()))
from sklearn.model_selection import ShuffleSplit
shuffle_split = ShuffleSplit(test_size=.5, train_size=.5, n_splits=10)
# train_size , test_size , n_iter , :train_size+test_size<1
scores = cross_val_score(logreg, iris.data, iris.target, cv=shuffle_split)
print("Cross-validation scores:
{}".format(scores))
from sklearn.model_selection import GroupKFold
groups = [0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3]
scores = cross_val_score(logreg, X, y, groups, cv=GroupKFold(n_splits=3))
# ,
print("Cross-validation scores:
{}".format(scores))
二、グリッド検索
1、概要目的:最適な汎化性能を提供するモデルのパラメータを見つけて簡単なプログラミング実現
for gamma in [0.001, 0.01, 0.1, 1, 10, 100]:
for C in [0.001, 0.01, 0.1, 1, 10, 100]:
svm = SVC(gamma=gamma, C=C)
svm.fit(X_train, y_train)
score = svm.score(X_test, y_test)
2、パラメータのオーバーフィットリスクを低減する——検証セット
X_trainval, X_test, y_trainval, y_test = train_test_split(iris.data, iris.target, random_state=0)
X_train, X_valid, y_train, y_valid = train_test_split(X_trainval, y_trainval, random_state=1)
score = svm.score(X_valid, y_valid)
svm.fit(X_trainval, y_trainval)
test_score = svm.score(X_test, y_test)
3、クロス検証付きメッシュ検索
scores = cross_val_score(svm, X_trainval, y_trainval, cv=5)
score = np.mean(scores)
param_grid = {'C': [0.001, 0.01, 0.1, 1, 10, 100],'gamma': [0.001, 0.01, 0.1, 1, 10, 100]}
#
from sklearn.model_selection import GridSearchCV
grid_search = GridSearchCV(SVC(), param_grid, cv=5,return_train_score=True)
grid_search.fit(X_train, y_train)
#
print("Test set score: {:.2f}".format(grid_search.score(X_test, y_test)))
# :best_score_ , score
results = pd.DataFrame(grid_search.cv_results_)
#
param_grid = [{'kernel': ['rbf'],'C': [0.001, 0.01, 0.1, 1, 10, 100],'gamma': [0.001, 0.01, 0.1, 1, 10, 100]},{'kernel': ['linear'],'C': [0.001, 0.01, 0.1, 1, 10, 100]}]
三、評価指標と採点
1、回帰指標:デフォルトのR^2を使用する(すべての回帰器のscore方法で与える)
2、不平和データセット:一つのクラスが圧倒的多数を占める
3、二分類指標
from sklearn.metrics import confusion_matrix
confusion = confusion_matrix(y_test, pred_logreg)
# confusion 2*2
from sklearn.metrics import classification_report
print(classification_report(y_test, svc.predict(X_test)))
from sklearn.metrics import precision_recall_curve
precision, recall, thresholds = precision_recall_curve(y_test, svc.decision_function(X_test))
plt.plot(precision, recall, label="precision recall curve")
from sklearn.metrics import average_precision_score
ap_svc = average_precision_score(y_test, svc.decision_function(X_test))
from sklearn.metrics import roc_curve
fpr, tpr, thresholds = roc_curve(y_test, svc.decision_function(X_test))
plt.plot(fpr, tpr, label="ROC Curve")
from sklearn.metrics import roc_auc_score
svc_auc = roc_auc_score(y_test, svc.decision_function(X_test))
4、多分類指標
f1_score(y_test, pred, average="micro")
f1_score(y_test, pred, average="macro")
5、モデル選択における評価指標の使用
roc_auc = cross_val_score(SVC(), X, y == 1,scoring="roc_auc")
# ‘accuracy’( ), ‘roc_auc’(AUC)
grid = GridSearchCV(SVC(), param_grid=param_grid, scoring="roc_auc")
#
四、まとめ
データ区分:トレーニングセット-トレーニングモデル;検証セット-モデルとパラメータを選択します.テストセット-モデル評価機械学習の最終目的を明確にする:モデル評価と選択の指標がモデルの実際の用途によく代わることを確保する
第六章アルゴリズムチェーンとパイプ
一、前処理によるパラメータ選択
二、パイプの構築
from sklearn.pipeline import Pipeline
pipe=Pipeline([("scaler", MinMaxScaler()), ("svm",SVC())])
# , scaler, MinMaxScaler , svm, SVC()
pipe.fit(X_train, y_train)
#
print("Test score: {:.2f}".format(pipe.score(X_test, y_test)))
# score
三、グリッド検索でパイプを使用する
param_grid = {'svm__C': [0.001, 0.01, 0.1, 1, 10, 100],'svm__gamma': [0.001, 0.01, 0.1, 1, 10, 100]}
# : + +
grid = GridSearchCV(pipe, param_grid=param_grid, cv=5)
grid.fit(X_train, y_train)
# MinMaxScaler , ,
print("Best cross-validation accuracy: {:.2f}".format(grid.best_score_))
print("Test set score: {:.2f}".format(grid.score(X_test, y_test)))
print("Best parameters: {}".format(grid.best_params_))
四、共通のパイプインタフェース
1、make_を使うpipelineはパイプを簡単に作成できます
pipe_short = make_pipeline(MinMaxScaler(), SVC(C=100))
: , step
2、namedを利用するStepアクセスステッププロパティ
components = pipe.named_steps["pca"].components_
3、アクセスメッシュ検索パイプの属性
print("Best estimator:
{}".format(grid.best_estimator_))
# GridSearchCV LogisticRegression
print("Logistic regression coefficients:
{}".format(grid.best_estimator_.named_steps["logisticregression"].coef_))
#
五、グリッド検索前処理ステップとモデルパラメータ
1、目的:監督タスクの出力で前処理パラメータを調整する
from sklearn.preprocessing import PolynomialFeatures
pipe = make_pipeline(StandardScaler(),PolynomialFeatures(),Ridge())
# 、 pipe
param_grid = {'polynomialfeatures__degree': [1, 2, 3],'ridge__alpha': [0.001, 0.01, 0.1, 1, 10, 100]}
# /
grid = GridSearchCV(pipe, param_grid=param_grid, cv=5, n_jobs=-1)
grid.fit(X_train, y_train)
2、Tips:ホットグラフでクロス検証結果を可視化
plt.matshow(grid.cv_results_['mean_test_score'].reshape(3,-1),vmin=0,cmap='viridis')
plt.xlabel('ridge__alpha')
plt.ylabel('polynomialfeatures__degree')
plt.xticks(range(len(param_grid['ridge__alpha'])),param_grid['ridge__alpha'])
plt.yticks(range(len(param_grid['polynomialfeatures__degree'])),param_grid['polynomialfeatures__degree'])
plt.colorbar()
3、最適モデルと対応点数の表示
print("Best parameters: {}".format(grid.best_params_))
print("Test-set score: {:.2f}".format(grid.score(X_test, y_test)))
六、グリッド検索どのモデルを使用するかを選択する
検索メッシュリストを使用して、random forestが前処理を必要としないなどのステップをスキップするとNoneに設定されます.
param_grid = [{'classifier': [SVC()], 'preprocessing': [StandardScaler(), None],'classifier__gamma': [0.001, 0.01, 0.1, 1, 10, 100],'classifier__C': [0.001, 0.01, 0.1, 1, 10, 100]},{'classifier': [RandomForestClassifier(n_estimators=100)],'preprocessing': [None], 'classifier__max_features': [1, 2, 3]}]
メッシュはこのように定義され、残りは同じです.