0%

图像分类是图像级别的,图像语义分割是到像素点级别的。

FCN可作为图像语义分割的基础框架参考。FCN论文,FCN原作代码

FCN的提出主要解决了:一般的CNN分类网络,如VGG和Resnet,会在网络的最后加入全连接层,经过softmax获取类别概率信息,但这个概率是一维的,所以只能对整个图片进行分类,是谓图像级别。

FCN结构提出将后面几个全连接替换成卷积,便可以获得一张2维的feature map,然后再接softmax便可获得每个像素点的分类信息,是谓像素点级别。可以支持解决图像语义分割问题。

图像语义分割整体流程:下采样+上采样 > 特征融合 > 获取像素级别类别判断

gplearn

主要思想是利用遗传算法的理念对特征进行有监督的符号编码,期望利用加入的随机性来发现一些对于机器学习算法难以发现的非线性关系。

下面示例代码说明了如何利用auc指标来衡量GP迭代过程的中的选择指标。

from sklearn.metrics import roc_auc_score,roc_curve,auc
from gplearn.fitness import make_fitness
def auc_score_lg(y_true, y_pred, sample_weight=None):
    fpr, tpr, thresholds   = roc_curve(y_true, y_pred, sample_weight)
    return auc(fpr,tpr)
auc_scores = make_fitness(function=auc_score_lg, greater_is_better=True)


function_set = ['add', 'sub', 'mul', 'div', 'sqrt', 'log', 'abs', 'neg', 'inv', 'max', 'min', 'sin', 'cos', 'tan']
gp = SymbolicTransformer(generations=20, population_size=20000,
                         hall_of_fame=200, n_components=200,
#                          metric='spearman',
                         metric=auc_scores,
                         function_set=function_set,
                         parsimony_coefficient='auto',
                         max_samples=0.9, verbose=1,
                         random_state=0, n_jobs=8)
gp.fit(train_train_X, train_train_Y)

超参调整与特征工程在机器学习中几乎同等重要。
继翻译的一本特征工程的书籍之后,对于参数调整是否也有方法论可以记录呢?

本文将记录一些自己在调参中的心得,不一定全部正确,随时更新。是为记录。

整体步骤应该:
先用少量数据进行参数大致区间锁定
注意学习率的影响,避免模型一下就跳出了搜索空间
分析训练/测试数据评测标准差距,判断是过拟合还是欠拟合
如果是过拟合则添加正则化或者剪枝
如果是欠拟合则增加迭代次数、模型规模或复杂度
如果在少量数据拟合效果比较好,则增加数据重复上述动作

Bagging与Boost调参

Bagging代表

Random Forest
Extra Trees

Boost代表

LightGBM
xgboost
catboost

调参差异

本文将不会对他们的构成做过多解释。
这两类模型的各自代表的参数调整大同小异,但是两类之间差异较大。每个算法的具体参数内容应当参考调用的模型包解释文档。

Bagging是并行思想,Boost是串行思想。

所以在训练的时候Bagging是互不相关的若干树,Boost是相关的一串树。

因此Boost的剪枝思想比较弱,主要通过正则化来避免过拟合。

Bagging则是先训练所有树,然后通过类似剪枝的操作来避免过拟合。

线性代数:
线性讲的是关系。
代数讲的是形式。

比如还有非线性代数,那是什么呢?

学堂上为什么要把行列式放在矩阵前面讲呢?讲了一堆的计算法则与矩阵的生态却是容易混淆的。
为什么不先讲矩阵及其生态,讲行列式作为一种特殊的计算形式进行讲解推进呢?
是因为难易程度吗?