Alteryx上でSMOTEを実装したく思い、こちら(Balancing Act: Classification with Imbalanced Data - Alteryx Community)のimbalanced_demo_final.yxzpからsmopte_family.yxmcをダウンロードし、データ入力ツールに接続して実行いたしました。
しかし、
「メモリの上限に達しました。閲覧ツールを接続してください」
と表示され、閲覧ツールを接続しても解消されませんでした。
そこで、smote_family.yxmcファイルを直接実行した所、Rツールで以下のエラーが出力されました。
「 R (25) set.seed() でエラー:
R (25) 引数 "seed" がありませんし、省略時既定値もありません
R (25) 実行が停止されました」
こちらのエラーの解消方法、またはAlteryxでSMOTEを実装する方法について教えていただければ幸いです。
よろしくお願いいたします。
@miyata さん
smote_family.yxmcですが、そのまま実行してもインターフェースツールの内容が設定されないような設計になっているため、そのまま実行はできません。
(マクロとして呼び出された時に動作するような作りになっています)
該当のブログのサンプルワークフローをダウンロードし、ワークフローを実行しましたが、SMOTEマクロは正常に動作しました。
(その後のランダムフォレストでコケてたので、データ量を変えて試したら動きましたが・・・)
おそらく、メモリの問題だと思うのですが、例えば、Inputに使うデータ量を10分の1などに減らしても動作しないでしょうか?
Rベースのツールだとあまり巨大なデータを入れるとメモリの問題で動かないことがあります。
その他、過去にPythonツールでSMOTEの実装を行ったことがありますので、そちらを使ってみてはいかがでしょうか?
※英語のディスカッションで恐縮ですが、imbalanced_python_test_AK2.yxzpが使えると思います(Pythonの場合も、古いSMOTEのパッケージを使わなければ動かなかったので、パッケージインストールの際に古いバージョンを指定してインストールするようにしています)。
一点補足ですが、smote_family.yxmcを直接開いて実行する場合は、
ワークフロー設定のワークフロータブの定数のところで、タイプ(Type)の項目がQuestionとなっている部分の値(Value)に適切に設定値を与えれば動きます。
Rのコード内で直接ここの値を取ってくるような作りになっているので、ここを設定せずに実行すると値が空っぽのままなのでRunしてもエラーになるという話です。
マクロとして呼び出される場合は、インターフェースの設定値がこの中に入ってくるので正常動作する、といった寸法です。
(この技はRのみで使え、Pythonだとこれ使えません。)
今回であれば、赤い○をつけたところを設定すれば動きます
梶谷さん
ありがとうございます。マクロに関しては値を設定することで動作が確認できました。
なお、マクロの動作を検証する際に使用したデータは2列10行のファイルでした。
検証で使用したテーブルおよびSMOTEツールの設定のキャプチャを添付しております。
(Capture_sampleData.png、Capture_SMOTE_setting.png)
また、梶谷様が掲載された過去のPythonツールでの実装についても拝見いたしました。
imbalanced_python_test_AK2.yxmdを実行した所、以下のようなエラーが出力されました。
(長文であったため、一部省略しております。)
Error: smote_family_python (128): ツール#22: ---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[2], line 12
9 import pandas as pd
11 # input data from Alteryx
---> 12 df = Alteryx.read("#1")
13 dfs = Alteryx.read("#2")
14 param_targetfield = dfs.iloc[0]['TargetField']
(中略)
AttributeError: module 'numpy' has no attribute 'bool'.
`np.bool` was a deprecated alias for the builtin `bool`. To avoid this error in existing code, use `bool` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.bool_` here.
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
こちらについて、対処法などご存じでしたら教えていただきたく存じます。
@miyata さん
画像を見たところ、非常に単純なデータみたいですね・・・。似たようなデータを作って試してみましたが、R版もPython版もうまく動かないので、データ量というよりまた別の条件のように思います。
Python版のエラーについては、Bool値を受け付けないような記載になっているので、データ型がBoolのものがあれば、Stringなどにデータ型を変更してみてはいかがでしょうか?
(私の環境ではそのまま動いてしまいましたが・・・)
梶谷様
ありがとうございます。使用しているデータにはbool値が含まれておらず、別の要因であると思われます。
エラー文には「`np.bool` was a deprecated alias for the builtin `bool`」との記載があり、こちらで検索した所、
AlteryxのNumpyライブラリのバージョンによる可能性がありそうです。
Error:"AttributeError: module 'numpy' has no attri... - Alteryx Community
ですのでAlteryxが使用しているライブラリのバージョン変更が必要であると考えられますが、
具体的な方法がわからない状況です。
ご存じでしたら、教えていただければ幸いです。
よろしくお願いいたします。
@miyata さん
頂いたリンクを確認した感じでもデータにBool値が含まれているとこのエラーが発生すると記載があります。
例えば、テキストインプットツールのあるカラムで、1、と0のみのデータになっていると、自動的にBool型と判定されますが、そのようなデータになっていないでしょうか?(結果ウィンドウの「メタデータ」ボタンやセレクトツールで確認できます)。
ライブラリのバージョンを落とすには、弊社ブログにも記載あるとおり、バージョン指定でパッケージのインストールが可能となっていますので、このやり方でいけると思います。
https://newssdx.kcme.jp/alteryx-tips_how_to_install_older_python_package/
ただ、ダウングレード後のパッケージと、必要とされるPythonのバージョンが合わないと動かなかったりするので、色々と確認が必要となります。
梶谷様
宮田です。
使用しているエクセルファイルにセレクトツールを接続し、データ型を改めて指定し実行しても同様のエラーが発生いたしました。
しかし、梶谷様が掲載されたリンクを基に、パッケージにバージョンを指定してnumpyをダウンロードした所、
マクロが正常に動作いたしました。
やはりnumpyのバージョンが適していなかったことが原因でエラーが発生したようです。
様々なご意見を下さり、ありがとうございました。
@miyata さま
numpyも縛りがあるんですね、、、結構Pythonの各種パッケージもバージョンの依存関係あるのでマクロ等で提供しようと思うとなかなか難儀ですね・・・。動作確認したときのバージョンで縛っておく方が良さそうです・・・。
numpyは完全に盲点でした・・・(私の環境では特に問題なかったので、こういうところをどうやって確認したらいいのか悩ましいところです・・・)。
情報ありがとうございました!