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

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

新規登録して質問してみよう
ただいま回答率
85.48%
scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Streamlit

Streamlitは、Pythonでフロントエンドアプリケーションを構築できるフレームワーク。HTML/CSSの知識が不要で、描画ライブラリで作成したグラフを埋め込むことが可能です。機械学習のレポート作成やデータ分析にも応用できます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

1306閲覧

streamlitで機械学習モデルをダウンロードできるようにしたい!

kabgon

総合スコア6

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Streamlit

Streamlitは、Pythonでフロントエンドアプリケーションを構築できるフレームワーク。HTML/CSSの知識が不要で、描画ライブラリで作成したグラフを埋め込むことが可能です。機械学習のレポート作成やデータ分析にも応用できます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2022/10/05 11:12

内容

streamlitで機械学習アプリを作成しようとしています。
アプリの内容は以下です。
①csv読み込み
②csv内のラベルから 説明変数 と 目的変数を選択
③機械学習モデル選択
④機械学習実行
⑤モデルのダウンロード ←ここでエラーがでて困っています!

scikit-learnで学習したモデルを
st.download_buttonで出力できるようにしたいです。

発生している問題・エラーメッセージ

Invalid binary data format: <class 'list'>

該当のソースコード

python

1#ライブラリの読み込み 2import time 3from scipy.fft import irfft 4import streamlit as st 5import pandas as pd 6import numpy as np 7import matplotlib.pyplot as plt 8import seaborn as sns 9from sklearn.model_selection import train_test_split 10from sklearn import linear_model 11from sklearn.linear_model import LogisticRegression 12from sklearn.preprocessing import LabelEncoder 13from sklearn.preprocessing import StandardScaler #スケーリングの為に追記 14import joblib # モデル保存用 15 16 17 18 19# 重回帰分析_学習の実行関数 を定義 20@st.cache(allow_output_mutation=True) 21def ex_model_linear(X_train, y_train): 22 lr = linear_model.LinearRegression() 23 lr.fit(X_train, y_train) 24 25 return lr 26 27 28 29#タイトル 30st.title("機械学習アプリ") 31st.write("streamlitで実装") 32 33# 以下をサイドバーに表示 34st.sidebar.markdown("### 機械学習に用いるcsvファイルを入力してください") 35#ファイルアップロード 36uploaded_files = st.sidebar.file_uploader("Choose a CSV file", accept_multiple_files= False) 37#ファイルがアップロードされたら以下が実行される 38if uploaded_files: 39 df = pd.read_csv(uploaded_files) 40 df_columns = df.columns 41 data_num=len(df) 42 #データフレームを表示 43 st.markdown("### 入力データ") 44 st.dataframe(df.style.highlight_max(axis=0)) 45 46 47 48 49 st.markdown("### モデリング") 50 #説明変数は複数選択式 51 ex = st.multiselect("説明変数を選択してください(複数選択可)", df_columns) 52 53 #目的変数は一つ 54 ob = st.selectbox("目的変数を選択してください", df_columns) 55 56 #機械学習のタイプを選択する。 57 ml_menu = st.selectbox("実施する機械学習のタイプを選択してください", ["重回帰分析"]) 58 59 60 61 62 if ml_menu == "重回帰分析": 63 st.markdown("#### 機械学習を実行します") 64 testsize=st.number_input('テストサイズを入力',0.0,1.0,0.3) 65 execute = st.button("実行") 66 67 68 69 #実行ボタンを押したら下記が進む 70 71 if execute : 72 df_ex = df[ex] 73 df_ob = df[ob] 74 X_train, X_test, y_train, y_test = train_test_split(df_ex.values, df_ob.values, test_size = testsize , random_state=1) 75 lr = ex_model_linear(X_train,y_train) 76 77 78 #プログレスバー(ここでは、やってる感だけ) 79 my_bar = st.progress(0) 80 81 for percent_complete in range(100): 82 time.sleep(0.02) 83 my_bar.progress(percent_complete + 1) 84 85 #metricsで指標を強調表示させる 86 col1, col2 = st.columns(2) 87 col1.metric(label="トレーニングスコア", value=lr.score(X_train, y_train)) 88 col2.metric(label="テストスコア", value=lr.score(X_test, y_test)) 89 90 91 92 #モデルのダウンロード 93 model = joblib.dump(lr,"model.pkl") 94 st.download_button("Downloa model" , model)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

streamlit.download_button() に渡さないといけないのは、文字列、バイト列もしくはファイルオブジェクトですが、このプログラムでは joblib.dump() の返り値を渡していて、joblib.dump() が返しているのはファイル名のリストです。
なので、質問にあるエラーが出ています。

作成したファイルをopenして渡すか、

python

1#モデルのダウンロード 2joblib.dump(lr, "model.pkl") 3with open("model.pkl", "rb") as model: 4 st.download_button("Download model", model)

実際にファイルを作成する必要がないなら、io.BytesIO を使うのがいいかと思います。

python

1from io import BytesIO 2 3model_io = BytesIO() 4joblib.dump(lr, model_io) 5st.download_button("Download model", model_io.getvalue())

投稿2022/10/05 14:58

bsdfan

総合スコア4567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kabgon

2022/10/08 11:27

bsdfanさん ご回答ありがとうございます。 分かりやすい解説でなぜエラーがでているのか理解できました!! そしてご提案いただいた方法で無事モデルのダウンロードができるようになりました!! 大変助かりました、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問