#D最適な実験計画をピックアップするコードです import pandas as pd import numpy as np import random number_of_selecting_samples=15 #選択するサンプル数 number_of_random_searches=10000 #ランダムにサンプルを選択してD最適基準を計算する繰り返し数 df=pd.read_csv('DOE_test.csv',index_col=0,header=0,encoding='cp932') #データの読み込み #実験条件の候補のインデックスの作成 all_indexs=list(range(df.shape[0])) np.random.seed(11) #乱数を生成するためのシードを固定 for random_serch_number in range(number_of_random_searches): #1.ランダムに候補を選択 new_selected_indexs=random.sample(all_indexs,number_of_selecting_samples) new_selected_samples=df.iloc[new_selected_indexs,:] #2.オートスケーリングした後にD最適基準を計算 autoscaled_new_selected_samples=(new_selected_samples-new_selected_samples.mean())/new_selected_samples.std() xt_x=np.dot(autoscaled_new_selected_samples.T,autoscaled_new_selected_samples) #転置行列と行列の内積を求める d_optimal_value=np.linalg.det(xt_x) #内積の行列式を求める。これがD最適基準値 #3.D最適基準が前回までの最大値を上回ったら、選択された候補を更新 if random_serch_number==0: best_d_optimal_value=d_optimal_value.copy() selected_sample_indexs=new_selected_indexs.copy() else: if best_d_optimal_value < d_optimal_value: best_d_optimal_value=d_optimal_value.copy() selected_sample_indexs=new_selected_indexs.copy() selected_samples_indexs=list(selected_sample_indexs) #リスト型に変換 #選択されたサンプル selected_samples=df.iloc[selected_samples_indexs,:] #保存 selected_samples.to_csv('selected_samples.csv') #相関行列の確認 対角線上以外が0に近いか確認する事 print(selected_samples.corr()) r_selected_samples=selected_samples.corr()