PLS 偏最小二乘算法 demo

現在網上大部分都是PLS的一些方法,下面我具體的展示一下代碼,

分爲四個部分,demo(演示),PLS_B(訓練B值),PRE(預測部分),DRAW(畫圖)總共四個部分,先來第一部分,具體的算法原理網上很多教程,這裏就不多說了,直接上代碼。

<span style="color:#3366ff;"><strong><span style="font-size:24px;">#encoding:utf-8

#從其他文件中導入需要的包和類
from Train_erro import Erro
from Drawing import drawing
import scipy.io as sio
from pls_B import PLS
import numpy as np
from sklearn import cross_validation

# 讀取需要使用的光譜數據
# fname = sio.loadmat(r"G:\data\NIRtablet.mat")
fname = sio.loadmat(r"G:\data\normal_NIR\normal_NIRtablet.mat")
print fname.keys()
    
X = fname["X"]
Y = fname["Y"]
# 將光譜數據進行劃分,劃分爲訓練部分和測試部分
X_train, X_test,Y_train, Y_test = cross_validation.train_test_split(X,Y,test_size=0.2, random_state=0)
# fname = sio.loadmat(r"G:\data\train_data.mat")
# X_train, X_test,Y_train, Y_test = fname['train_x'], fname['test_x'], fname['train_y'], fname['test_y']  

#將數據進行中心化處理
Xtrainmean = np.mean(X_train, axis=0)
Ytrainmean = np.mean(Y_train, axis=0)
ytestmean = np.mean(Y_test, axis=0)
xtestmean = np.mean(X_test, axis=0)
X_center = np.subtract(X_train, Xtrainmean)
Y_center = np.subtract(Y_train, Ytrainmean)
xtest_center = np.subtract(X_test, xtestmean)                              
ytest_center = np.subtract(Y_test,ytestmean)

#設置要選取的主成分個數, 一般需要交叉驗證,這點直接給出
pc = 5

#調用PLSS算法,得到計算後的B
plss = PLS()
B = plss.comput(pc, X_center, Y_center)

#進行訓練,調用訓練的函數
train_erro, return_Y = Erro(pc, X_center, Y_train, B, Ytrainmean)

#進行預測,調用預測函數
test_erro, return_y = Erro(pc, xtest_center, Y_test, B, ytestmean)

#畫圖
draw=drawing()
# 散點圖
draw.Distribution(pc, Y_train, return_Y, Y_test, return_y)
# 折線圖
# draw.Distribution(pc, Y_test, return_y)
draw.Line_chart(train_erro,test_erro )
# draw.Line_chart(test_erro)</span></strong></span><span style="color:#ff0000;"><strong><span style="font-size:24px;">
</span></strong>
</span>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章