InfraAcademy

InfraAcademy Blog

SVC object has no attribute _probAというエラーの対処方法

| #AI #機械学習

こんにちは、フルスタックエンジニアのryuです。

今回の記事は、’SVC’ object has no attribute ‘_probA’というエラーの対処方法について解説します。機械学習のSVMの予測モデルをDjangoで使用した場合に発生したエラーです。原因はscikit-learnのバージョンの違いでした。

SVC object has no attribute _probAというエラーの対処方法

今回の記事は、「’SVC’ object has no attribute ‘_probA’」というエラーの対処方法について解説します。

原因は、作成したモデルのscikit-learnのバージョンと、予測を実行したscikit-learnのバージョンが違うことでした。さらに詳しく解説します。

エラーが起きた状況

まず、エラーが起きた状況について解説します。Djangoを使用して機械学習の予測アプリの作成をしていました。DjangoはDockerで動作していました。

予測のモデルをGoogle Colaboratoryで作成して、保存したモデルをDjangoで使用しておりました。

予測モデルの作成のコードについては以下の通りです。

import numpy as np
import pickle
from sklearn import svm

#csvファイルの読み込み
npArray = np.loadtxt("data.csv", delimiter = ",", dtype = "float")

# 説明変数の格納
x = npArray[:, 0:5]

#目的変数の格納
y = npArray[:, 5:6].ravel()

#学習手法にSVMを選択
model = svm.SVC( probability=True)

#学習
model.fit(x,y)

#学習モデルの保存
with open('model.pickle', mode='wb') as f:
    pickle.dump(model,f,protocol=2)

エラーの対処方法

Djangoには先ほども紹介した通り、「SVC’ object has no attribute ‘_probA」が表示されました。エラーについて調査していると、以下のコメントを発見しました。

現在使用しているモデルのトレーニングに使用したのと同じバージョンのsci-kitを使用する必要があることが判明しました(scikit-learn \=\= 0.21.2)。それ以降のバージョンのscikitは、既存のコード/モデルでは機能しません。scikitをアップグレードする場合は、新しいバージョンのscikitでモデルを再トレーニングする必要があります。

(https://stackoverflow.com/ より引用 日本語訳)

つまり、sicikit-learnのバージョンを学習時と予測時で合わせれば良いのです。学習したモデルを別の環境で実行しようとするとこのようなエラーがでるらしいですね。

今回の場合は、Docker内に学習データとコーディングを移動させてモデルを作成したら解消しました。

エラーの対処方法まとめ

今回の記事では、scikit-learnのエラーについて解説しました。モデル作成後のエラーは分かりづらいので原因調査に苦労しました。

同じエラーで苦労している方の助けになればと思います。当ブログではこのようなITに関連する記事を解説しているので興味のある方は他の記事もご欄下さい。

あわせて読みたい - AWS入門講座一覧 - Azure入門講座一覧 - Docker入門講座一覧

また、AIや機械学習について勉強したい方はこちらの参考書がオススメです。

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る