現在X線回析やNMRのような連続値を持つ多次元のスペクトルデータの解析を主成分分析等を用いて行っています。
[やりたいこと]
42次元のスペクトルデータと物性Aの間の関係性を機械学習し、新規データに対して予測値を得たい。
[困っていること]
下記コードのように主成分回帰後のモデルをpicleで保存/呼び出しして新たなデータ(newdata.csv)に対してpredictしたが、
新規データは次元圧縮していないので以下のエラーが出る。
ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 6 is different from 42)
[知りたいこと]
1.主成分回帰やPLS回帰後のモデル保存はpicleで可能なのか?他の方法があるのか?
2.新規データの次元圧縮はどのように行うべきか?
python
1import pandas as pd 2import numpy as np 3import os 4import glob 5from pathlib import Path 6from sklearn.preprocessing import StandardScaler 7from sklearn.model_selection import train_test_split 8from sklearn.linear_model import LinearRegression 9from sklearn.decomposition import PCA 10import random 11import pickle 12 13np.random.seed(1) 14random.seed(1) 15 16#csvファイル取得 17program_dir = Path(__file__).parent.resolve() 18totaldata_dir = program_dir / 'Trainingdata.csv' 19totaldata = pd.read_csv(totaldata_dir, index_col=0, encoding='utf-8') 20 21#データ前処理 22X_ = totaldata.drop('A', axis=1) 23y_ = pd.DataFrame(totaldata['A'], columns=['A']) 24 25X_std = StandardScaler().fit_transform(X_) 26X_std = pd.DataFrame(X_std, columns=X_.columns) 27 28n_train_rate = 0.7 29train_X_data, test_X_data, train_y_data, test_y_data = train_test_split(X_std, y_, test_size=1-n_train_rate) 30 31#PCA 32pca = PCA(n_components=6) 33X_train_pca = pca.fit_transform(train_X_data) 34X_test_pca = pca.transform(test_X_data) 35 36#LinearRegression 37linear_model = LinearRegression() 38linear_model.fit(X_train_pca, train_y_data) 39 40#モデル保存 41filename = 'predict_model.sav' 42pickle.dump(linear_model, open(filename, 'wb')) 43 44#モデル呼び出し 45modelname = 'predict_model.sav' 46predictedmodel = pickle.load(open(modelname, 'rb')) 47 48#新規csvデータ読み込み(*新規csvデータには物性Aの列は存在しない) 49newdata_dir = program_dir / 'newdata.csv' 50newdata_X = pd.read_csv(newdata_dir, index_col=0, encoding='utf-8') 51 52#予測値出力 53print('Predict value:', predictedmodel.predict(newdata_X))
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/27 13:28
2021/01/27 13:38
2021/01/27 14:02