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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

機械学習

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

Python

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

統計

統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

Q&A

解決済

2回答

801閲覧

ある5つのデータが与えられた時に判別するためのモデルの作り方について

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

機械学習

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

Python

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

統計

統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

0グッド

1クリップ

投稿2019/06/25 01:44

編集2019/06/25 08:31

前提・実現したいこと

地点Aと地点Bにおける5つの測定データから新たに5つの測定データが与えられた時に、そのデータがAなのかBのものなのかを判別できるモデルを作ろうとしています。

以下がサンプルデータで目視でもD2とD4のデータで地点A/Bで顕著なちがいが確認できます。

D2 D1 D3 D4 D5  地点 2.46 1.21 0.87 0.14 1.21 A 2.48 1.20 0.91 0.15 1.03 A 2.45 1.19 0.90 0.14 1.25 A 2.43 1.19 0.86 0.13 1.22 A 2.46 1.19 0.89 0.14 1.24 A 0.34 1.13 0.93 0.52 1.23 B 0.30 1.01 0.58 0.77 1.25 B 0.60 0.81 0.48 0.57 1.25 B 0.52 1.23 0.59 0.53 1.25 B 0.46 1.20 0.85 0.55 1.12 B

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

Excelで回帰分析をして各データに対する重みを明らかにしようとしましたが、係数は出てもここから判別に向けて何をすればいいのかわからず、困っています。

試したこと

回帰分析で例えば地点AのD2を表す式として以下のように係数は求めましたが、地点ABを組み合わせて回帰分析をすると係数は変わりますし、そもそも5つの新たなデータが与えられた時に判別したいという目的が達成できていません。

地点Aの場合

係数 切片 -23.29882298 X 値 1 16.42353043 X 値 2 12.13171446 X 値 3 -33.63940812 X 値 4 0.150280146

地点ABを組み合わせた場合

係数 切片 4.898916806 X 値 1 -0.354494066 X 値 2 0 X 値 3 -4.671124951 X 値 4 -0.561016193

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

excel 16.16.11

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

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

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

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

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

guest

回答2

0

ベストアンサー

scikit-learnでロジスティック回帰で解くとこんな感じ。

python

1import io 2import numpy as np 3import pandas as pd 4from sklearn.linear_model import LogisticRegression 5from sklearn.preprocessing import LabelEncoder 6 7df = pd.read_csv(io.StringIO(""" 8D2 D1 D3 D4 D5  地点 92.46 1.21 0.87 0.14 1.21 A 102.48 1.20 0.91 0.15 1.03 A 112.45 1.19 0.90 0.14 1.25 A 122.43 1.19 0.86 0.13 1.22 A 132.46 1.19 0.89 0.14 1.24 A 140.34 1.13 0.93 0.52 1.23 B 150.30 1.01 0.58 0.77 1.25 B 160.60 0.81 0.48 0.57 1.25 B 170.52 1.23 0.59 0.53 1.25 B 180.46 1.20 0.85 0.55 1.12 B 19"""), sep="\s+", engine="python") 20 21target = df["地点"].values 22X = df[["D2", "D1", "D3", "D4", "D5"]].values 23 24le = LabelEncoder() 25y = le.fit_transform(target) 26 27# ロジスティック回帰で学習させる 28clf = LogisticRegression(solver="lbfgs") 29clf.fit(X, y) 30 31# 学習データを予測してみる 32y_pred = clf.predict(X) 33print(le.inverse_transform(y_pred)) 34print(clf.predict_proba(X)) 35 36# 新データを予測してみる(ダミーの生成が面倒なので、学習データにノイズをまぶして使います) 37rand = np.random.RandomState(seed=0) 38new_data = X + rand.normal(scale=0.5, size=X.shape) 39print(new_data) 40y_pred = clf.predict(new_data) 41print(le.inverse_transform(y_pred)) 42print(clf.predict_proba(new_data)) 43 44""" => 45['A' 'A' 'A' 'A' 'A' 'B' 'B' 'B' 'B' 'B'] 46[[0.84302938 0.15697062] 47 [0.84791869 0.15208131] 48 [0.84121511 0.15878489] 49 [0.83664303 0.16335697] 50 [0.84311917 0.15688083] 51 [0.14391734 0.85608266] 52 [0.11909916 0.88090084] 53 [0.18311209 0.81688791] 54 [0.1751691 0.8248309 ] 55 [0.16677915 0.83322085]] 56[[ 3.34202617 1.4100786 1.35936899 1.2604466 2.143779 ] 57 [ 1.99136106 1.67504421 0.8343214 0.09839057 1.23529925] 58 [ 2.52202179 1.91713675 1.28051886 0.20083751 1.47193162] 59 [ 2.59683716 1.93703954 0.75742087 0.28653385 0.79295213] 60 [ 1.18350509 1.5168093 1.3222181 -0.23108251 2.37487731] 61 [-0.38718284 1.15287926 0.83640807 1.28638961 1.96467938] 62 [ 0.37747371 1.19908126 0.13610713 -0.22039823 1.07604393] 63 [ 0.67817448 1.42514534 1.08118992 0.37633659 1.09884862] 64 [-0.00427648 0.51999103 -0.2631351 1.5053877 0.99517391] 65 [ 0.24096285 0.57360232 1.23874518 -0.25694892 1.01362986]] 66['A' 'A' 'A' 'A' 'B' 'B' 'B' 'B' 'B' 'B'] 67[[0.94045476 0.05954524] 68 [0.73033981 0.26966019] 69 [0.8682963 0.1317037 ] 70 [0.87055769 0.12944231] 71 [0.4697141 0.5302859 ] 72 [0.03840542 0.96159458] 73 [0.16977072 0.83022928] 74 [0.24121152 0.75878848] 75 [0.05158952 0.94841048] 76 [0.15853856 0.84146144]] 77"""

こんな感じでモデルを作って、pickleにでもしておけば、あとは新データの予測に使えます。

エクセルで線形判別分析でやってもできそうだけど、ちと面倒でしょう。

投稿2019/06/25 08:35

hayataka2049

総合スコア30933

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

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

0

何か難しいことをしているので、「そういう事じゃない」とか言われそうですが。


D2のAは、2.43~2.48 の間に収まっている。
最小値と最大値の差は0.05分、範囲を広くする(広くする値はテキトーです)
最小値:2.43-0.05 = 2.38
最大値:2.48+0.05 = 2.53
仮にD2のAは 2.38~2.53 とする。

D2のBは、0.30~0.60 の間に収まっている。
最小値と最大値の差は0.30テキトーに範囲を広くする
最小値:0.30-0.30 = 0.00
最大値:0.60+0.30 = 0.90
仮にD2のBは 0.00~0.90 とする。

AとBで範囲が被っていないので、D2の値でAとBを判別できるものとする。


D1のAは、1.19~1.21 の間に収まっている。
最小値と最大値の差は0.02分、範囲を広くする
最小値:1.19-0.02 = 1.17
最大値:1.21+0.02 = 1.23
仮にD1のAは 1.17~1.23 とする。

D1のBは、0.81~1.23 の間に収まっている。
最小値と最大値の差は0.42テキトーに範囲を広くする
最小値:0.81-0.42 = 0.39
最大値:1.23+0.42 = 1.65
仮にD1のBは 0.39~1.65 とする。

AとBで範囲が被ってるので、D1の値ではAとBは判別できないものとする。


D4のAは、0.13~0.15 の間に収まっている。
最小値と最大値の差は0.02分、範囲を広くする
最小値:0.13-0.02 = 0.11
最大値:0.15+0.02 = 0.17
仮にD4のAは 0.11~0.17 とする。

D4のBは、0.52~0.77 の間に収まっている。
最小値と最大値の差は0.25テキトーに範囲を広くする
最小値:0.52-0.25 = 0.27
最大値:0.77+0.25 = 1.02
仮にD4のBは 0.27~1.02 とする。

AとBで範囲が被っていないので、D4の値でAとBを判別できるものとする。


自分でやるなら、こんな感じです。

投稿2019/06/25 07:37

torisan

総合スコア678

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問