python, R, vimでデータマイニング

python, R, vim で疑問に思ったことなどを

RMSEを計算する関数を用意しておく

sklearnにはRMSEを計算する関数がない模様で毎回コードを書くのが面倒なので自作パッケージ内の関数として用意しておく。

 

1. rmse

Root mean squared error regression loss.

1.1. 使用方法

from utils4ml.sklearnwrappers import rmse

1.2. 関数定義

import numpy as np
from sklearn.metrics import mean_squared_error


def rmse(
    y_true,
    y_pred,
    sample_weight=None,
    multioutput='uniform_average',
):
    args = locals()
    mse = mean_squared_error(**args)
    rmse = np.sqrt(mse)
    return rmse

1.3. 戻り値

  • rmse:

1.4. 使用例

code:
# %%
from utils4ml.sklearnwrappers import rmse
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
rmse(y_true, y_pred)
# %%

*.adoc にasciidoctorコマンドを適用する find -exec

自分用にパッケージを作成していてドキュメントをadocで作成している。

一つの関数ごとにadocを一つ作成していて数が多くなるので一括でコマンドを適用したい。

 

一般的な使用方法なので調べればすぐに分かるけど私用にshellscriptに用意しておこう。

find . -name "*.adoc" -type f -exec asciidoctor {} \;

機械学習モデルのパラメータをデータフレームに変換してCSVファイルに書き込む

機械学習モデルのパラメータは辞書で作成します。
パラメータの内容を確認するときに辞書よりもデータフレームやCSVファイルのほうが適している場合があります。
asciidocではCSVファイルが扱いやすいです。
ただパラメータの値は文字列だったり数値だったりするのでCSVファイルに書き込んでしまうと面倒なことになります。
パラメータのデータフレーム化はパラメータ内容の確認のためのもので
ただCSVファイルで管理するとパラメータが文字列なのか数値なのかの処理が必要となってしまい実用性はありません。

1. パラメータの辞書作成

まずはパラメータの辞書を作成します。

Code:
# %%
import pandas as pd
from pprint import pprint
parameters = {
    'param1': 'method1',
    'param2': 0.123456789
}
# %%

2. パラメータをデータフレームに変換

from_dict関数を使用してデータフレームに変換します。
このとき、orient引数を指定しないとエラーが発生します。
また、後々扱いやすいように変数名も指定します。

Code
# %%
parameters_df = pd.DataFrame.from_dict(
    parameters,
    orient='index',
    columns=['value']
).reset_index().rename(columns={'index':'parameter'})

parameters_df.to_csv(
    'output/parameters_df.csv',
    index=False
)
# %%
Table 1. parameters_df.csv
parameter value

param1

method1

param2

0.123456789

3. 関数化

後々のため関数化します。
ニーズがニッチ過ぎて私しか使用しなそうですが。

Code
# %%
def parameters_to_DataFrame(
    parameters
):
    parameters_df = pd.DataFrame.from_dict(
        parameters,
        orient='index',
        columns=['value']
    ).reset_index().rename(columns={'index':'parameter'})
    return parameters_df
# %%

LGBMClassifierのモデルをdumpしたい

ちょっと調べてみたところ
from sklearn.externals import joblib
で行けるらしい。
試してみる。
→ 問題なくできました。

1. モデルの作成

Code:
# %%
import pandas as pd
from lightgbm import LGBMClassifier

from utils4ml.utils import create_X_y_of_bank
from utils4ml.sklearnwrappers import train_test_split_roc_auc_score

X, y = create_X_y_of_bank()
score, estimator = train_test_split_roc_auc_score(
    LGBMClassifier(silent=True,),
    X,
    y.y,
)
# %%

2. モデルのdump

Code:
# %%
from sklearn.externals import joblib
joblib.dump(estimator, 'estimator.pkl')
# %%

3. モデルのload

Code:
# %%
clf = joblib.load('estimator.pkl')
# %%

4. loadしたモデルでpredict

Code:
# %%
pred = clf.predict_proba(X)
# %%

pip install from git ssh

git sshのインストールで少しだけハマったので。

 

gitのcloneで使用するSSHURI

git@github.com:<username>/<reponame>.git

なので頭にssh://を付与して

 

pip install ssh://git@github.com:<username>/<reponame>.git

とすると場所がみつからずエラーとなる。

:を/に変える必要があった。

pip install ssh://git@github.com/<username>/<reponame>.git

 

ちなみにpipenvでinstallする場合は最後に#egg=<パッケージ名>

を追加する必要があるみたい。

 

Pipenv でプロジェクト名(ディレクトリ名)や場所を変更したい

ちょっと調べたのですが有用な情報を見つけることができませんでした。

あまり推奨されないのでしょうか?

 

環境構築に時間がかかりますし、ネット環境がない状況に対応するため

予め構築済みの環境を使いましたかったのですが。