🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

Python

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

データマイニング

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

Q&A

1回答

1126閲覧

10人分の順位データを入力し、そのデータから次の探索点を出力したい

KoyoKIMURA

総合スコア1

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

Python

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

データマイニング

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

0グッド

0クリップ

投稿2021/01/24 08:38

実現したいこと,構想

塩ラーメンの調味料配合比の実験を行おうとしている。、まずランダムに表示された10個の探索点のパラメータのラーメンを作り、10人に食べてもらう。そして10人それぞれに10食分順位づけしてもらい、その10人分の順位データを入力すると次の探索点の候補を出力する、というのを1試行とし、これを10試行行う。最初の1試行はランダムで、残りの9試行はqNEIという獲得関数を用いて探索点を出す。
1試行ごとに順位付けを行い、その順位データを入力すると次の探索点10点が出力されるようにしたい。

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

10人分の順位データを1試行ずつ入力し、そのデータから次の探索点10点を出力したいが、10人分の順位データを1試行ずつ入力して行く方法がわからない。

該当のソースコード

python

1ソースコード 2import os 3 4import numpy as np 5import matplotlib.pyplot as plt 6from scipy.stats import zscore 7 8from botorch.models.pairwise_gp import PairwiseGP, PairwiseLaplaceMarginalLogLikelihood 9from botorch.fit import fit_gpytorch_model 10from botorch.acquisition import qNoisyExpectedImprovement 11from botorch.optim import optimize_acqf 12import torch 13import itertools 14from create_function import utility_3D, generate_train_x, generate_comparisons 15from normalization_max_min import norm_max_min 16 17 18def observation_max_points(model, results): 19 observation_point = model.posterior(results).mean.tolist() 20 next_x_index = observation_point.index(max(observation_point)) 21 next_x = results[next_x_index] 22 23 return next_x 24 25def main(m, loop, noise, bounds, test_f_name, acq_session=10): 26 IMAGE_DIR = "./accuracy/qNEI1_qNEI2/image_3D/" + test_f_name +"/qNEI" 27 if not os.path.exists(IMAGE_DIR): 28 # ディレクトリが存在しない場合、ディレクトリを作成する 29 os.makedirs(IMAGE_DIR) 30 split = 101 31 p0 = torch.linspace(1, 2, split) #鶏ガラ 32 p1 = torch.linspace(1, 2, split) #ごま油 33 p2 = torch.linspace(1, 2, split) #塩 34 points_0, points_1, points_2 = torch.meshgrid(p0, p1, p2) 35 points_mesh = torch.stack((points_0, points_1, points_2), dim=-1) 36 val_y = utility_3D(points_mesh, split=split, f_name=test_f_name).numpy() 37 38 index_ = np.unravel_index(np.argmax(val_y), val_y.shape) # val_yの最大値のインデックス 39 val_y[index_] #テスト関数の値の最大値 40 points_mesh[index_] #テスト関数の値が最大となる座標 41 val_y_max = points_mesh[index_] 42 val_y_max[0] = (val_y_max[0] - 1)/(2 - 1)*(8 - 0.5)+ 0.5 43 val_y_max[1] = (val_y_max[1] - 1)/(2 - 1)*(8 - 1)+ 1 44 val_y_max[2] = (val_y_max[2] - 1)/(2 - 1)*(8 - 1)+ 1 45 46 for k in range(m + acq_session): 47 if k < m : 48 49 train_X = generate_train_x(n=10, dim=3) 50 train_y = utility_3D(train_X,f_name="Sine_Plane_Wave") 51 train_comp = [] 52 53 for i in range(len(train_y)-1): 54 for j in range((i + 1), len(train_y)): 55 if train_y[i] > train_y[j]: 56 preference = [i, j] 57 else: 58 preference = [j, i] 59 train_comp.append(preference) 60 model = PairwiseGP(train_X, torch.Tensor(train_comp)) 61 mll = PairwiseLaplaceMarginalLogLikelihood(model) 62 mll = fit_gpytorch_model(mll) 63 print(train_X) 64 train_X[:,0] = ((train_X[:,0] - 1)/(2 - 1))*(8 - 0.5)+ 0.5 65 train_X[:,1] = ((train_X[:,1] - 1)/(2 - 1))*(8 - 1)+ 1 66 train_X[:,2] = ((train_X[:,2] - 1)/(2 - 1))*(8 - 1)+ 1 67 print(train_X[:,0], train_X[:,1], train_X[:,2]) 68 69 else: 70 # 獲得関数を用いた試行 71 qNEI = qNoisyExpectedImprovement( 72 model=model, 73 X_baseline=train_X.float() 74 ) 75 76 next_X, acq_val = optimize_acqf( 77 acq_function=qNEI, 78 bounds=bounds, 79 q=10, 80 num_restarts=5, 81 raw_samples=256 82 ) 83 train_X = torch.cat((train_X, next_X), dim=0) 84 train_y_ = utility_3D(next_X, f_name="Sine_Plane_Wave") 85 86 for i in range(len(train_y_)-1): 87 for j in range((i + 1), len(train_y_)): 88 if train_y_[i] > train_y_[j]: 89 preference = [i + (train_X.shape[0] - next_X.shape[0]), j + (train_X.shape[0] - next_X.shape[0])] 90 else: 91 preference = [j + (train_X.shape[0] - next_X.shape[0]), i + (train_X.shape[0] - next_X.shape[0])] 92 train_comp.append(preference) 93 print(train_comp) 94 model = PairwiseGP(train_X, torch.Tensor(train_comp)) 95 mll = PairwiseLaplaceMarginalLogLikelihood(model) 96 mll = fit_gpytorch_model(mll) 97 98 pred_y = norm_max_min(model.posterior(points_mesh).mean.squeeze().detach().numpy(), 99 max_=val_y.max(), min_=val_y.min()) 100 101 index = np.unravel_index(np.argmax(pred_y), pred_y.shape) # pred_yの最大値のインデックス 102 pred_y[index] #予測平均最大値 103 points_mesh[index] # 予測平均最大となる座標 104 105 pred_y_max = points_mesh[index] 106 pred_y_max[:,0] = (pred_y_max[:,0] - 1)/(2 - 1)*(8 - 0.5) + 0.5 107 pred_y_max[:,1] = (pred_y_max[:,1] - 1)/(2 - 1)*(8 - 1) + 1 108 pred_y_max[:,2] = (pred_y_max[:,2] - 1)/(2 - 1)*(8 - 1) + 1 109 print(pred_y_max[:,0], pred_y_max[:,1], pred_y_max[:,2]) 110 111

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

順位データの入力は手入力かExcelで入力したデータを読み込んでやろうとおもっています。
有識者の方々、どのようにすればやりたい個おができるのかアドバイスお願い致します。
ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

エクセルで行うならこれが楽かな。

python

1>>> import pandas as pd 2>>> df = pd.read_excel('ramen.xlsx') 3>>> print(df) 4 Unnamed: 0 ラーメン0 ラーメン1 ラーメン2 ラーメン3 ラーメン4 ラーメン5 ラーメン6 ラーメン7 ラーメン8 ラーメ ン9 50 試食者0 1 2 3 4 5 6 7 8 9 10 61 試食者1 2 3 4 5 6 7 8 9 10 1 72 試食者2 3 4 5 6 7 8 9 10 1 2 83 試食者3 4 5 6 7 8 9 10 1 2 3 94 試食者4 5 6 7 8 9 10 1 2 3 4 105 試食者5 6 7 8 9 10 1 2 3 4 5 116 試食者6 7 8 9 10 1 2 3 4 5 6 127 試食者7 8 9 10 1 2 3 4 5 6 7 138 試食者8 9 10 1 2 3 4 5 6 7 8 149 試食者9 10 1 2 3 4 5 6 7 8 9

元のエクセルは以下
イメージ説明

投稿2021/01/24 09:30

編集2021/01/24 09:34
ppaul

総合スコア24670

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問