連續投影演算法 python版

2021-10-09 15:06:04 字數 2458 閱讀 4104

連續投影演算法大量用於光譜特徵波長選擇中,翻遍全網,spa演算法只找到了matlab版本。

連續投影演算法(successive projections algorithm, spa) 是前向特徵變數選擇方法。spa利用向量的投影分析,通過將波長投影到其他波長上,比較投影向量大小,以投影向量最大的波長為待選波長,然後基於矯正模型選擇最終的特徵波長。spa選擇的是含有最少冗餘資訊及最小共線性的變數組合。該演算法簡要步驟如下。

記初始迭代向量為 xk(

0)

x_xk

(0)​

,需要提取的變數個數為n

nn,光譜矩陣為j

jj列。

任選光譜矩陣的1列(第j

jj列),把建模集的第j

jj列賦值給x

jx_j

xj​,記為 xk(

0)

x_xk

(0)​

。將未選入的列向量位置的集合記為sss,

s =}

s=\lbrace j,1\leq\leq, j\notin \lbrace k(0), \cdots, k(n-1) \rbrace \rbrace

s=}分別計算x

jx_j

xj​對剩餘列向量的投影:

p xj

=xj−

(xjt

xk(n

−1))

xk(n

−1)(

xk(n

−1)t

xk(n

−1))

−1,j

∈s

p_ = x_j-(x^t_j x_)x_(x^t_x_)^,j\in s

pxj​​=

xj​−

(xjt

​xk(

n−1)

​)xk

(n−1

)​(x

k(n−

1)t​

xk(n

−1)​

)−1,

j∈s提取最大投影向量的光譜波長,

k (n

)=ar

g(ma

x(∥p

(xj)

∥),j

∈s

)k(n) = arg(max(\| p_(x_j) \|), j \in s)

k(n)=a

rg(m

ax(∥

p(​x

j​)∥

),j∈

s)令x j=

px,j

∈s

x_j = p_x, j \in s

xj​=px

​,j∈

s。n =n

+1

n = n + 1

n=n+

1,如果n

<

nn < n

n<

n,則按公式(1)迴圈計算。

最後,提取出的變數為

\lbrace x_ = 0, \cdots, n-1 \rbrace

。對應每一次迴圈中的k(0

)k(0)

k(0)

和n

nn,分別建立多元線性回歸分析(mlr)模型,得到建模集互動驗證均方根誤差(rmsecv),對應不同的候選子集,其中最小的rmsecv值對應的k(0

)k(0)

k(0)

和n

nn就是最優值。一般spa選擇的特徵波長分數n

nn不能很大。

​ -------------------------摘自《光譜及成像技術在農業中的應用》p130

**以 倉庫為準 ,待作者研究一下《開源法則》進一步編寫使用文件,在此之前 請遵守開源協議 bsd-3-clause

資料暫不提供 使用前請熟悉 pandas numpy matplot的使用 資料操作問題不予回答

光譜矩陣(m * n)m行為樣本,n列為波段

進行建模前需要對光譜進行 建模集測試集分割 與 資料歸一化 ,可先進行分割再歸一,也可以先歸一再分割,下邊為分割再歸一

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import minmaxscaler

xcal, xval, ycal, yval = train_test_split(x, y, test_size=

0.4, random_state=0)

min_max_scaler = minmaxscaler(feature_range=(-

1,1)

) xcal = min_max_scaler.fit_transform(xcal)

xval = min_max_scaler.transform(xval)

3.原始碼倉庫

Kruskal 演算法 Python版

好久沒寫了,有點遺忘記錄一下 kruskal 演算法 對所有的邊排序 依次選擇每一條邊,看是否能將邊加入到已經生成好的樹中 若是能,則加入 否則,繼續步驟2,直至新增到樹中的邊的數量為節點數 1 的時候 這裡用了並查集的思路 設定乙個記錄每乙個節點的父親的陣列,用於判斷將邊加進已生成樹時是否會有環生...

viterbi演算法 python版

牛mm細心給我講了乙個小時,終於明白它的含義,然後花了一兩節分布式資料庫的課實現了。當時牛mm還說不可能這麼快實現,結果不可能事還是發生了。發現python果真非常好用。不明白此演算法可以看這篇blog 初始化方法 viterbi演算法函式 結果列印輸出函式 nodes format path is...

greedy演算法 python版

greedy演算法的核心思想是首先計算覆蓋面大的部分,然後依次尋找其他覆蓋面最大的部分。該演算法的使用場景就像他的名字一樣,當符合貪婪屬性的時候就可以考慮。states needed set 北京 上海 廣州 深圳 杭州 南京 石家莊 銀川 stations stations kone set 北京...