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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Pythonista

Pythonistaは、iOS上でPythonプログラミングができる開発アプリです。さらに、Pythonの関数・変数などを自動で補完する便利なコードエディタや、PythonスクリプトをiOS上で多様な形で機能させる各種機能も内包しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

解決済

ロジスティック回帰分析の結果を元データに反映させたいが結果が全て0になる?

Pablito
Pablito

総合スコア71

Pythonista

Pythonistaは、iOS上でPythonプログラミングができる開発アプリです。さらに、Pythonの関数・変数などを自動で補完する便利なコードエディタや、PythonスクリプトをiOS上で多様な形で機能させる各種機能も内包しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

2回答

0評価

0クリップ

176閲覧

投稿2020/10/08 07:11

編集2020/10/09 06:27

前提・実現したいこと

PythonのScikit Learnで行ったロジスティック回帰分析の結果を
元データに反映させてID(列)ごとにスコアを出したいと考えております。

しかし、計算式を正しく打ったつもりが結果が全て0で出てしまいます。

元データ

Amount Profit Quantity Frequency Order ID B-25601 1429.0 -1218.0 19 8 B-25602 3889.0 975.0 22 10 B-25603 2025.0 -180.0 25 16 B-25604 222.0 22.0 11 4 B-25605 75.0 0.0 7 2 ... ... ... ... ... B-26096 1091.0 121.0 18 6 B-26097 1688.0 -504.0 23 7 B-26098 1189.0 350.0 21 6 B-26099 3417.0 859.0 15 4 B-26100 934.0 256.0 6 3

回帰係数と切片

回帰係数: [[ -4.35516166 490.43789796 -1.42371766 1.0599378 ]] 切片: [69.30989536]

コード

Python

#元データ *** Amount Profit Quantity Frequency Order ID B-25601 1429.0 -1218.0 19 8 B-25602 3889.0 975.0 22 10 B-25603 2025.0 -180.0 25 16 B-25604 222.0 22.0 11 4 B-25605 75.0 0.0 7 2 ... ... ... ... ... B-26096 1091.0 121.0 18 6 B-26097 1688.0 -504.0 23 7 B-26098 1189.0 350.0 21 6 B-26099 3417.0 859.0 15 4 B-26100 934.0 256.0 6 3 *** #優良/休眠顧客情報を追加 def Dormant(x): if x > 0: return 1 else: return 0 datrum['Customer Type'] = datrum['Profit'].apply(Dormant) datrum.head(10) *** Amount Profit Quantity Frequency Customer Type Order ID B-25601 1429.0 -1218.0 19 8 0 B-25602 3889.0 975.0 22 10 1 B-25603 2025.0 -180.0 25 16 0 B-25604 222.0 22.0 11 4 1 B-25605 75.0 0.0 7 2 0 B-25606 87.0 4.0 2 2 1 B-25607 50.0 15.0 4 2 1 B-25608 2953.0 -1456.0 19 8 0 B-25609 510.0 24.0 8 4 1 B-25610 2105.0 -746.0 24 12 0 *** #テストデータをテスト用と訓練用に分ける x_train, x_test, y_train, y_test = train_test_split( datrum.iloc[:, 0:4], datrum.iloc[:, 4], test_size=0.3, random_state=1 ) #データを標準化 scl = StandardScaler() scl.fit(x_train) #学習用データで標準化 x_train_std = scl.transform(x_train) x_test_std = scl.transform(x_test) clf = LogisticRegression(C=1e5) clf.fit(x_train_std, y_train)#訓練データから学習を行う print( "正解率:{:.2f}%".format(accuracy_score(y_test, clf.predict(x_test_std)) * 100 )) *** 正解率:100.00% *** print('回帰係数:', clf.coef_) *** 回帰係数: [[ -4.35525949 490.44187802 -1.42342501 1.0620863 ]] *** print('切片:', clf.intercept_) *** 切片: [69.31399488] *** x = datrum[['Amount', 'Profit', 'Quantity', 'Frequency']] y = datrum['Customer Type'] print('決定係数:', clf.score(x, y)) *** 決定係数: 0.998 *** #学習効果の検証 X_test = datrum.iloc[:, 0:4] y_predict = clf.predict(X_test) print('検証結果:', y_predict) *** 検証結果: [0 1 0 1 0 1 1 0 1 0 0 0 0 1 1 0 0 1 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1] *** #Create an empty column import numpy as np datrum['Score'] = np.nan print(datrum['Score']) *** Order ID B-25601 NaN B-25602 NaN B-25603 NaN B-25604 NaN B-25605 NaN .. B-26096 NaN B-26097 NaN B-26098 NaN B-26099 NaN B-26100 NaN Name: Score, Length: 500, dtype: float64 *** #create a function to apply the output to data def predict_score(x): return 1 / (1 + np.exp(-(x.iloc[1] * -4.4 + x.iloc[2] * 490.4 + x.iloc[3] * -1.4 + x.iloc[4] * 1.1 + 69.3))) datrum["Score"] = datrum.apply(predict_score, axis=1) datrum.head(10) #出てきたメッセージ #<ipython-input-26-b3ac908bb86f>:4: RuntimeWarning: overflow encountered in double_scalars #return 1 / (1 + math.e ** (x.iloc[1] * -4.35516166 + x.iloc[2] * 490.43789796 + x.iloc[3] * -1.42371766 + x.iloc[4] * 1.0599378 + 69.30989536)) *** Amount Profit Quantity Frequency Customer Type Score Order ID B-25601 1429.0 -1218.0 19 8 0 0.0 B-25602 3889.0 975.0 22 10 1 0.0 B-25603 2025.0 -180.0 25 16 0 0.0 B-25604 222.0 22.0 11 4 1 0.0 B-25605 75.0 0.0 7 2 0 0.0 B-25606 87.0 4.0 2 2 1 0.0 B-25607 50.0 15.0 4 2 1 0.0 B-25608 2953.0 -1456.0 19 8 0 0.0 B-25609 510.0 24.0 8 4 1 0.0 B-25610 2105.0 -746.0 24 12 0 0.0 ***

ロジスティック回帰分析の式

p=1 / 1+exp(−(a1x1+a2x2+⋯+anxn+b))

何卒よろしくお願い申し上げます。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Pythonista

Pythonistaは、iOS上でPythonプログラミングができる開発アプリです。さらに、Pythonの関数・変数などを自動で補完する便利なコードエディタや、PythonスクリプトをiOS上で多様な形で機能させる各種機能も内包しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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