続Modelの評価 - Dummy ClassifierとConfusion Matrix
Accuracy以外での評価
例えばImbalance Data(不均衡データ)の評価はどうあってもAccuracyが高くなるため、他の指標を用いる必要がある
- Dummy Classifierで基準となる評価値を取得
- 探索的にDummy ClassifierよりよいModelを発見
- Confusion MatrixでAccuracy以外の評価値を比較
Dummy Classifier
説明変数を用いず、被説明変数を使ってシンプルな予測を返す。つまり単純に被説明変数の分布を再現する。
Modelによる推定ではないのでスタートとしてよい。Dummy Classifierより評価が高いことがModelの最低限の条件となる。
Usage
from sklearn.dummy import DummyClassifier
class sklearn.dummy.DummyClassifier(strategy='warn', random_state=None, constant=None)
Parameter: strategy (default as stratified)
choose
- frequency
- most_frequent
- prior
- uniform
- constant
Confusion Matrix
Modelの予測値と観測地の関係を表した行列。統計でいう第1種の過誤と第2種の過誤を返す
Predicted Negative | Predicted Positive | |
True Negative | TN | FP |
Tru Positive | FN | TP |
Structure
from sklearn.metrics import confusion_matrix
sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None, normalize=None)
Sample
from sklearn.tree import DecisionTreeClassifier from sklearn.datasets import load_breast_cancer from sklearn.metrics import confusion_matrix cancer = load_breast_cancer() X = pd.DataFrame(cancer.data, columns=cancer.feature_names) y = pd.Series(cancer.target) X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0) clf = DecisionTreeClassifier(criterion='gini', max_depth=5,min_samples_leaf=3 ,random_state=0) clf.fit(X_train,y_train) #Score print('{} train score: {:.3f}'.format(clf.__class__.__name__, clf.score(X_train, y_train))) print('{} test score: {:.3f}'.format(clf.__class__.__name__, clf.score(X_test, y_test))) #Confusion Matrix y_pred = clf.predict(X_test) cm = confusion_matrix(y_test, y_pred) print('Confusion Matrix:\n{}'.format(cm))
ここで
Claffisicatoin Report
Confusion_matrix から、各種評価値をつくる
- Accuracy(正解率): 全体のうち、どれだけ正しく予測しているか
- Recall(再現率、検出率): 本来真のもののうち、どれだけ真と予測されたか
- Precision(適合率、精度): 真と予測されたもののうち、どれだけ本来真か
- F1: PrecisionとRecallの調和平均
Structure
from sklearn.metrics import classification_report
sklearn.metrics.classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2, output_dict=False, zero_division='warn')
Sample
from sklearn.metrics import classification_report target_names = ['class 0', 'class 1'] #classificationをDataFrameにする(Jupyter上の見た目がきれいになる) pd.DataFrame(classification_report(y_test,y_pred, target_names=target_names, output_dict=True))
Modelの評価 (Accuracy)
Modelの評価値
R値(Score)
統計の決定係数=(単回帰では)被説明変数の分散をどの程度説明変数の分散でカバーしているか、Accuracy の代表
Usage
- 各sklearn modelのscore method
- r2_score: from sklearn.metrics.regression import r2_score
Training DataとTest Dataの差から以下の分析
- Underfitting: both train data and test data have low scores.
- Overfitting: the train is good but the test is not.
- Good: both are good
評価値の検証用ツール
Cross-validation
データセットを k個に分割し,モデルの訓練と評価を k 回行う
得られた k個の評価値の平均をとった値を最終的なモデルのスコアとする
Usage
from sklearn.model_selection import cross_val_score
Parameter: cv or k (default as 5)
- データセットの分割個数
Validation Curve
モデルのパラメータを動かしながら各パラメータ値のスコアをCross-valiadtionで算出する
Usage
from sklearn.model_selection import validation_curve
Parameter: param_name, param_range, cv
- param_name: 動かしたいパラメータ
- param_range: 上記パラメータを動かす範囲
- cv: データセットの分割、試行回数(default as 5)
Python Machine Laerning Models
Machine Learning の基礎
Supervised Learning
全体の流れ
データを学習用とテスト用に分割する
- X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
- from sklearn.model_selection import train_test_split
学習モデルのオブジェクトを作る
- knn = KNeighborsClassifier(n_neighbors = 5)
- from sklearn.neighbors import KNeighborsRegressor3
(データの分割とModelのHyper Parametersについてはこちらも参照)
モデルにデータを学習させる
- knn.fit(X_train, y_train)
テストデータを使ってモデルの各種評価値を計算する
- knn.score(X_test, y_test)
モデルの種類
大きく分けて
- Classifier
- Regression
の2種類
K-nearest neighbor classifier
対象から近いk個の点からの重みづけで予測する
Parameter: k
上記のとおり、重みづけの起点となるサンプルの個数
- Lower: Jagged boundaries, Higher Variance, High model complexity -> overfitting
- Larger: Sommth boundaries, Lower Variance, Lower model complexity
Ridge Regression
Regression Model (Least Square等)にペナルティαをつけたもの, L2 Penalty
Parameter: Alpha (deafualt as 1.0)
Regularization terms、モデル全体に対する各変数間の重みを標準化することで、overfitting, model cpmplexityを低下させる。各係数の和。
- Lower: less regularization, more complex model -> overfitting
- Larger: more regularization, simpler model
Lasso Regression
Regression Model (Least Square等)にペナルティαをつけたもの、重みの小さな変数は係数ゼロにされる, L1 penalty
Parameter: Alpha (default as1.0)
Regularization terms、モデル全体に対する各変数間の重みを標準化することで、overfitting, model cpmplexityを低下させる。各係数の絶対値の和。
Lasso vs Ridge
- 小から中程度の重みを多くの変数がもつ場合:Ridge
- 重みの中程度から大きい少数の変数がある場合:Lasso
SVM(RBF)
クラス分類において、被説明変数の次元を増やす
ことによって非線形な境界線をつくる。
Kernelの選択によりRadial Basis Function等、次元の増やし方を選択できる。
多クラス分類の場合にはOneVsResetCallsifierと組み合わせて使うことが可能。
Parameter: C
コストパラメーター、誤分類をどの程度許容するのか、
- Lower:誤分類を許容する
- Larger:誤分類を許容しない
Gamma
直感的にはKearnel の半径や広さを調整する
- Lower: 単純なboundaries
- Larger: 複雑なboundaried
プライバシーポリシー
こんにちは管理人のsingappです。下記、「プライバシーポリシー」に関して記載致しましたので、ご一読願います。
当サイトに掲載されている広告について
当サイトでは、第三者配信の広告サービス(Googleアドセンス、A8.net、Amazonアソシエイト、バリューコマース)を利用しています。
このような広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するため、当サイトや他サイトへのアクセスに関する情報 『Cookie』(氏名、住所、メール アドレス、電話番号は含まれません) を使用することがあります。
またGoogleアドセンスに関して、このプロセスの詳細やこのような情報が広告配信事業者に使用されないようにする方法については、こちらをクリックしてください。
当サイトが使用しているアクセス解析ツールについて
当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。
このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。
このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。
この規約に関して、詳しくはこちら、またはこちらをクリックしてください。
当サイトへのコメントについて
当サイトでは、スパム・荒らしへの対応として、コメントの際に使用されたIPアドレスを記録しています。
これはブログの標準機能としてサポートされている機能で、スパム・荒らしへの対応以外にこのIPアドレスを使用することはありません。
また、メールアドレスとURLの入力に関しては、任意となっております。
全てのコメントは管理人である singapp が事前にその内容を確認し、承認した上での掲載となりますことをあらかじめご了承下さい。
加えて、次の各号に掲げる内容を含むコメントは管理人の裁量によって承認せず、削除する事があります。
- 特定の自然人または法人を誹謗し、中傷するもの。
- 極度にわいせつな内容を含むもの。
- 禁制品の取引に関するものや、他者を害する行為の依頼など、法律によって禁止されている物品、行為の依頼や斡旋などに関するもの。
- その他、公序良俗に反し、または管理人によって承認すべきでないと認められるもの。
免責事項
当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。
当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。
当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。
当サイトで掲載している画像や動画の著作権・肖像権等は各権利所有者に帰属致します。
プライバシーポリシーの変更について
当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。
修正された最新のプライバシーポリシーは常に本ページにて開示されます。
運営者:singapp
AnacondaとVScode for Python
Anaconda
インストール
もちろんPython3.7
PATH
環境設定から
Pathをダブルクリック
以下2つは最低でも加えておく
C:\Users\Username\Anaconda3
C:\Users\Username\Anaconda3\Scripts
仮想環境を構築
-
以下で仮想環境を作り
-
実行
-
離脱
-
削除
VSCode
インストール
Extention
まずはPython
そしてPowershell
YAMAL
Statusbar error
Code Spell Checker - Visual Studio Marketplace
見た目系
Path Intellisense - Visual Studio Marketplace
vscode-icons - Visual Studio Marketplace
Bracket Pair Colorizer 2
indent-rainbow
Trailing Spaces
PIPにやられる
テキスト通りにpipを呼び出そうとすると
という無情なメッセージをもらう。
指示通りに打ち込むとpython2にpipがつながれてしまい、python3で起動できない。
小一時間の検索の結果
"python3-pip"にすればよいことを知り、やっとpipを導入できました。
が。。。
今度はpermissionの問題が発生した模様。
もういややん。
次いこ
Linuxにつまずく
順調に第2部まで終え、Pythonなぞ恐るるに足らんとおもいきや
独学プログラマー Python言語の基本から仕事のやり方まで
- 作者: コーリー・アルソフ,清水川貴之監訳,清水川貴之,新木雅也
- 出版社/メーカー: 日経BP社
- 発売日: 2018/02/24
- メディア: 単行本
- この商品を含むブログ (4件) を見る
Bashってなんやねん
こんなときはwikiのお世話にwikipedia:Bash。。。余計にわかりません。
なんだかわからないが、windows派の自分にはWidows Subsystem for Linuxが必要らしい。早速ググると
Aruneko様が丁寧な解説していてくださる。
できました
IT界隈のみなさまのなんと親切なことか。Commodityのくそ野郎ども行儀の悪い方たちとは人間としての質が違います。