PyInv

プログラミングのメモ、海外投資のメモ

続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))

f:id:singapp:20200918155353p:plain




ここで

Claffisicatoin Report

Confusion_matrix から、各種評価値をつくる

  1. Accuracy(正解率): 全体のうち、どれだけ正しく予測しているか

     \displaystyle{\frac{(TN+TP)}{(TN+FP+FN+TP)}}
      

  1. Recall(再現率、検出率): 本来真のもののうち、どれだけ真と予測されたか

      \displaystyle{\frac{TP}{(FN+TP)}}

  1. Precision(適合率、精度): 真と予測されたもののうち、どれだけ本来真か

     \displaystyle{\frac{TP}{(FP+TP)}}

  1. F1: PrecisionとRecallの調和平均

   \displaystyle{2\times\frac{Precision\times Recall}{(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))



f:id:singapp:20200918161345p:plain

Modelの評価 (Accuracy)

 

Modelの評価値

R値(Score)

統計の決定係数=(単回帰では)被説明変数の分散をどの程度説明変数の分散でカバーしているか、Accuracy の代表

Usage
  1. 各sklearn modelのscore method
  2.  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)

 

 

singapp.hatenablog.com

 

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についてはこちらも参照)

 

singapp.hatenablog.com

 

 

 

モデルにデータを学習させる

  • 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)

Support Vector Machine

クラス分類において、被説明変数の次元を増やす

ことによって非線形な境界線をつくる。

Kernelの選択によりRadial Basis Function等、次元の増やし方を選択できる。

 

多クラス分類の場合にはOneVsResetCallsifierと組み合わせて使うことが可能。

 

 

Parameter: C 

コストパラメーター、誤分類をどの程度許容するのか、

  • Lower:誤分類を許容する
  • Larger:誤分類を許容しない

Gamma

直感的にはKearnel の半径や広さを調整する

  • Lower: 単純なboundaries
  • Larger: 複雑なboundaried

 

 

プライバシーポリシー

こんにちは管理人のsingappです。下記、「プライバシーポリシー」に関して記載致しましたので、ご一読願います。



当サイトに掲載されている広告について

当サイトでは、第三者配信の広告サービス(GoogleアドセンスA8.netAmazonアソシエイトバリューコマース)を利用しています。
このような広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するため、当サイトや他サイトへのアクセスに関する情報 『Cookie』(氏名、住所、メール アドレス、電話番号は含まれません) を使用することがあります。
またGoogleアドセンスに関して、このプロセスの詳細やこのような情報が広告配信事業者に使用されないようにする方法については、こちらをクリックしてください。

当サイトが使用しているアクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。
このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。
このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。
この規約に関して、詳しくはこちら、またはこちらをクリックしてください。

当サイトへのコメントについて

当サイトでは、スパム・荒らしへの対応として、コメントの際に使用されたIPアドレスを記録しています。
これはブログの標準機能としてサポートされている機能で、スパム・荒らしへの対応以外にこのIPアドレスを使用することはありません。
また、メールアドレスとURLの入力に関しては、任意となっております。
全てのコメントは管理人である singapp が事前にその内容を確認し、承認した上での掲載となりますことをあらかじめご了承下さい。
加えて、次の各号に掲げる内容を含むコメントは管理人の裁量によって承認せず、削除する事があります。

  • 特定の自然人または法人を誹謗し、中傷するもの。
  • 極度にわいせつな内容を含むもの。
  • 禁制品の取引に関するものや、他者を害する行為の依頼など、法律によって禁止されている物品、行為の依頼や斡旋などに関するもの。
  • その他、公序良俗に反し、または管理人によって承認すべきでないと認められるもの。


免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。
当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。
当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。
当サイトで掲載している画像や動画の著作権・肖像権等は各権利所有者に帰属致します。

プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。

運営者:singapp

AnacondaとVScode for Python

Anaconda 

 

インストール

www.anaconda.com

もちろんPython3.7

PATH

 環境設定から

f:id:singapp:20190518195509p:plain

Pathをダブルクリック

f:id:singapp:20190518195618p:plain

以下2つは最低でも加えておく

C:\Users\Username\Anaconda3

C:\Users\Username\Anaconda3\Scripts

仮想環境を構築

  • 以下で仮想環境を作り
conda create -n py37 python=3.7
  •  実行
conda activate py37
  • 離脱
conda deactivate
  • 削除
conda remove -n py37 --all

 

 VSCode

 インストール

code.visualstudio.com

Extention

まずはPython

marketplace.visualstudio.com

そしてPowershell

marketplace.visualstudio.com

 

 

 

 

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を呼び出そうとすると

f:id:singapp:20190515011059p:plain

という無情なメッセージをもらう。

指示通りに打ち込むとpython2にpipがつながれてしまい、python3で起動できない。

 

小一時間の検索の結果

"python3-pip"にすればよいことを知り、やっとpipを導入できました。

 

が。。。

f:id:singapp:20190515011453p:plain

今度はpermissionの問題が発生した模様。

もういややん。

 

次いこ

 

Linuxにつまずく

順調に第2部まで終え、Pythonなぞ恐るるに足らんとおもいきや

 

独学プログラマー Python言語の基本から仕事のやり方まで

独学プログラマー Python言語の基本から仕事のやり方まで

 

 

 

 

Bashってなんやねん

こんなときはwikiのお世話にwikipedia:Bash。。。余計にわかりません。

なんだかわからないが、windows派の自分にはWidows Subsystem for Linuxが必要らしい。早速ググる

Aruneko様が丁寧な解説していてくださる。

qiita.com

 

 できました

f:id:singapp:20190508025415p:plain

 

IT界隈のみなさまのなんと親切なことか。Commodityのくそ野郎ども行儀の悪い方たちとは人間としての質が違います。