光谱分析预处理工具箱(一)总览

光谱分析预处理工具箱(一)总览

本来一直想基于pyqt5写一个小小的光谱分析软件。集成搜索最佳预处理,GPU加速支持等。并想把AutoML技术用上,自动实现特征工程,机器学习模型搜索和超参数搜索,然后集成各种模型得出最后的模型,完全自动化只需少量人工干预。

摘录关于AutoML,你想知道的都在这里!

**自动机器学习(AutoML)**是将机器学习应用于现实问题的端到端流程自动化的过程。

传统机器学习模型大致可分为以下四个部分:数据采集、数据预处理、优化、应用;

其中数据预处理与模型优化部分往往需要具备专业知识的数据科学家来完成,他们建立起了数据到计算的桥梁。

然而,即使是数据科学家,也需要花费大量的精力来进行算法与模型的选择。

机器学习在各种应用中的成功,导致对机器学习从业人员的需求不断增长,因此我们希望实现真正意义上的机器学习,让尽可能多的工作也能够被自动化完成,进一步降低机器学习的门槛,让没有该领域专业知识的人也可以使用机器学习来完成相关的工作。

AutoML应运而生。

从传统机器学习模型出发,AutoML从特征工程、模型构建、超参优化三方面实现自动化;并且也提出了end-to-end的解决方案。

但是我还是在校大学生,目前比较忙,没有时间做,有时间再写成一个python框架并发布到git。这里先将一些光谱预处理的工具发布出来,这是第一篇,总览,写的很粗糙,只做了一些参数的标注。以后有时间的话会慢慢介绍各种光谱预处理算法。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import signal
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import MinMaxScaler,StandardScaler

# 最大最小值归一化
def MMS(data):
    return MinMaxScaler().fit_transform(data)

# 标准化
def SS(data):
    return StandardScaler().fit_transform(data)

# 均值中心化
def CT(data):
    for i in range(data.shape[0]):
        MEAN = np.mean(data[i])
        data[i]=data[i]-MEAN
    return data

# 标准正态变换
def SNV(data):
    for i in range(data.shape[0]):
        MEAN = np.mean(data[i])   # 计算平均值
        STD = np.std(data[i],ddof=1)  # 标准偏差
        data[i] = (data[i] - MEAN)/STD
        return data

# 移动平均平滑
# WSZ是窗口宽度,是奇数
def MA(a,WSZ=21):
    for i in range(a.shape[0]):
        out0 = np.convolve(a[i],np.ones(WSZ,dtype=int),'valid')/WSZ
        r = np.arange(1,WSZ-1,2)
        start = np.cumsum(a[i,:WSZ-1])[::2]/r
        stop = (np.cumsum(a[i,:-WSZ:-1])[::2]/r)[::-1] 
        a[i] = np.concatenate(( start , out0, stop ))
    return a

# Savitzky-Golay平滑滤波,w和q为参数
def SG(data,w=21,p=3):
    return signal.savgol_filter(data,w,p)

# 一阶导数
def D1(data):
    n,p = data.shape
    Di = np.ones((n,p-1))
    for i in range(n):
        Di[i] = np.diff(data[i])
    return Di

# 二阶导数
def D2(data):
    n,p = data.shape
    Di = np.ones((n,p-2))
    for i in range(n):
        Di[i] = np.diff(np.diff(data[i]))
    return Di

# 趋势校正(DT)
def DT(data):
    x = np.asarray(range(350,2501),dtype = np.float32)
    out = np.array(data)
    l = LinearRegression()
    for i in range(out.shape[0]):
        l.fit(x.reshape(-1,1),out[i].reshape(-1,1))
        k = l.coef_
        b = l.intercept_
        for j in range(out.shape[1]):
            out[i][j] = out[i][j]-(j*k+b)      
    return out

# 多元散射校正
# MSC(数据)
def MSC(Data):
    # 计算平均光谱
    n,p = Data.shape
    msc = tp.ones((n,p))
    
    for j in range(n):
        mean = tp.mean(Data,axis = 0)

    # 线性拟合
    for i in range(n):
        y = Data[i,:]
        l = LinearRegression()
        l.fit(mean.reshape(-1,1),y.reshape(-1,1))
        k = l.coef_
        b = l.intercept_
        msc[i,:] = (y - b) / k
    return msc
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值