質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.92%

sklearnで学習したデータを使ってデータ予測をしたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 562

nonshi

score 17

sklearnで学習したデータを使ってデータ予測をしたい

sklearnで学習したデータを保存して学習したデータをもとに分類気を作りたいです。

現在、検討しているのがpickleで保存して、このソースコードとは違うものでしてほしいデータを投げたら答えを返してくれるというものです。

発生している問題

どうやって学習した分類気を保存して、それをどう使って作るかわからない。

該当のソースコード

import numpy as np
import matplotlib.pyplot as plt
import pickle

# ファイルの読み込み
Saxis_data = []
training_data_file = open("training_data_2.data", "r")
for line in training_data_file:
    line = line.rstrip().split(",")
    Saxis_data.append([float(line[0]), float(line[1])])
training_data_file.close()


Saxis_target = []
training_data_file = open("training_data_2.data", "r")
for line in training_data_file:
    line = line.rstrip().split(",")
    Saxis_target.append(int(line[2]))
training_data_file.close()


X = np.array(Saxis_data)
Y = np.array(Saxis_target)                  
#print(X)
#print(Y)

from sklearn.svm import SVC
model = SVC(gamma='scale')


from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, random_state=3)

model.fit(X_train,Y_train)


from sklearn import metrics
predicted = model.predict(X_test)
expected = Y_test
print(metrics.accuracy_score(expected,predicted))

試したこと

データの保存ができたがそこからどうやって分類気を作るかわからなかった。
(今回は回答の混乱を避けるためここに関しては無視してください。)

補足情報(FW/ツールのバージョンなど)

自分が考えているものよりいいものがあればそれでも大丈夫です。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

pickleを使うなら

import pickle
# ...

with open("model.pkl", "wb") as f:
    pickle.dump(model, f)

で保存して、

import pickle
# ...

with open("model.pkl", "rb") as f:
    model = pickle.load(f)

# ...
model.predict(target_data)

とかです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/11 02:58

    回答ありがとうございます。
    さっそく試してみたのですが2つめのコードで
    NameError: name 'target_data' is not defined
    と出てしまいました。

    キャンセル

  • 2019/02/11 03:06

    ー追加ー
    target_dataの部分は予測してほしいデータを入れると解釈し、そこに
    X_test = [0.0401541,0.155155]
    model.predict(X_test)
    と自分なりにやりましたら
    ValueError: Expected 2D array, got 1D array instead:
    array=[0.0401541 0.155155 ].
    Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
    となりました。これは変数の形がおかしいから変形しろと言っているのでしょうか?

    キャンセル

  • 2019/02/11 03:20

    predictメソッドの引数はshape=(サンプル数, ベクトル次元数)のような配列です。複数のデータに対する予測が返ります。
    X_test = [[0.0401541,0.155155]]
    でとりあえず通ると思います。

    キャンセル

  • 2019/02/11 05:32

    できました!
    なぜこれができているか理解できていないので、ご教授もらったものも含め、勉強します。ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る