Spectral Angle Mapper Classifer(光谱角分类)
原理如下:
光谱角分类的计算公式类似于:
两个公式一样的,只是不同的写法,公式搜集于网络。但代码自己写的
动手根据光谱角分类写了一个模块
import numpy as np
import pandas as pd
class SamC(object):
def __init__(self):
self.X=None
self.Y=None
self.Y_label=None
def fit(self,x,y): #训练
self.X=x
self.Y=y
def predict(self,x): #预测
if x.ndim==1:
self.Y_label=np.argmin(np.arccos(np.round(self.X.dot(x.reshape(-1,1))/(np.linalg.norm( \
self.X,axis=1)*np.linalg.norm(x)).reshape(-1,1),5)))
else:
sita_f=self.X.dot(x.T)
sita_m=np.linalg.norm(self.X,axis=1).reshape(-1,1).dot(np.linalg.norm(x.T,axis=0).reshape(1,-1))
SITA=np.arccos(np.round(sita_f/sita_m,5))
self.Y_label=np.argmin(SITA,axis=0)
return self.Y[self.Y_label]
if __name__=='__main__':
samc=SamC()
train_x=np.arange(1,21).reshape(5,4) #训练数据
yy=np.arange(1,6)#训练标签
samc.fit(train_x,yy)
print(samc.predict(train_x))