零基础入门数据挖掘之建模调参

神经网络③——sklearn参数介绍及应用 一、MLPClassifier&MLPRegressor参数和方法 MLPClassifier(solver=’sgd’, activation=’relu’,alpha=1e-4,hidden_layer_sizes=(50,50), random_state=1,max_iter=10,learning_rate_init=.1) 参数说明(分类和回归参数一致): hidden_... 阅读详情

作者:徐韬 ,Datawhale优秀学习者 

摘要:对于数据挖掘项目,本文将学习如何建模调参?从简单的模型开始,如何去建立一个模型;如何进行交叉验证;如何调节参数优化等。

建模调参:特征工程也好,数据清洗也罢,都是为最终的模型来服务的,模型的建立和调参决定了最终的结果。模型的选择决定结果的上限, 如何更好的去达到模型上限取决于模型的调参。

数据及背景

https://tianchi.aliyun.com/competition/entrance/231784/information(阿里天池-零基础入门数据挖掘)

理论简介

模型调参基于特征工程所构建的模型上限来优化模型。由于模型的不同和复杂度,模型的参数数量也都不一样。线性模型需要调整正则化的系数,而对于非线性模型,例如随机森林和LGB等模型,需要调节的参数增多。

模型调参的目的就是提升模型的性能度量。对于回归算法,我们要降低模型在未知的数据上的误差;对于分类算法,我们要提高模型在未知数据上的准确率。

知识总结

回归分析

回归分析是一种统计学上分析数据的方法,目的在于了解两个或多个变量间是否相关、相关方向与强度,并建立数学模型。以便通过观察特定变量(自变量),来预测研究者感兴趣的变量(因变量)

一般形式:

向量形式:


其中向量代表一条样本,其中代表样本的各个特征,是一条向量代表了每个特征所占的权重,b是一个标量代表特征都为0时的预测值,可以视为模型的basis或者bias。

损失函数我们希望的是能够减少在测试集上的预测值与真实值的差别,从而获得一个最佳的权重参数,因此这里采用最小二乘估计。

长尾分布

这种分布会使得采样不准,估值不准,因为尾部占了很大部分。另一方面,尾部的数据少,人们对它的了解就少,那么如果它是有害的,那么它的破坏力就非常大,因为人们对它的预防措施和经验比较少。

欠拟合与过拟合

欠拟合:训练的模型在训练集上面的表现很差,在验证集上面的表现也很差。即训练误差和泛化误差都很大。原因:

  • 模型没有很好或足够数量的训练训练集

  • 模型的训练特征过于简单

过拟合:模型的训练误差远小于它在测试数据集上的误差。即训练误差不错,但是泛化误差比训练误差相差太多。原因:

  • 模型没有很好或足够数量的训练训练集

  • 训练数据和测试数据有偏差

  • 模型的训练过度,过于复杂,没有学到主要的特征

由此引出模型复杂度概念模型中的参数,一个简单的二元线性的函数只有两个权重,而多元的复杂的函数的权重可能会什么上百上千个。

模型复杂度太低(参数过少),模型学习得太少,就难以训练出有效的模型,便会出现欠拟合。模型复杂度太高(参数很多),即模型可训练空间很大,容易学习过度,甚至于也将噪声数据学习了,便会出现过拟合。

正则化

损失函数后面会添加一个额外项,称作 L1正则化 和 L2正则化,或者 L1范数和 L2范数。

L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些参数做一些限制。对于线性回归模型,使用L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归)。

L1正则化模型:

L2正则化模型:

正则化说明:

  • L1正则化是指权值向量中各个元素的绝对值之和,通常表示为

  • L2正则化是指权值向量中各个元素的平方和然后再求平方根(可以看到Ridge回归的L2正则化项有平方符号)

正则化作用:

  • L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择

  • L2正则化可以防止模型过拟合(overfitting)

调参方法

贪心调参 (坐标下降)

坐标下降法是一类优化算法,其最大的优势在于不用计算待优化的目标函数的梯度。最容易想到一种特别朴实的类似于坐标下降法的方法,与坐标下降法不同的是,不是循环使用各个参数进行调整,而是贪心地选取了对整体模型性能影响最大的参数。参数对整体模型性能的影响力是动态变化的,故每一轮坐标选取的过程中,这种方法在对每个坐标的下降方向进行一次直线搜索(line search)

网格调参GridSearchCV

作用是在指定的范围内可以自动调参,只需将参数输入即可得到最优化的结果和参数。相对于人工调参更省时省力,相对于for循环方法更简洁灵活,不易出错。

贝叶斯调参

贝叶斯优化通过基于目标函数的过去评估结果建立替代函数(概率模型),来找到最小化目标函数的值。贝叶斯方法与随机或网格搜索的不同之处在于,它在尝试下一组超参数时,会参考之前的评估结果,因此可以省去很多无用功。

超参数的评估代价很大,因为它要求使用待评估的超参数训练一遍模型,而许多深度学习模型动则几个小时几天才能完成训练,并评估模型,因此耗费巨大。贝叶斯调参发使用不断更新的概率模型,通过推断过去的结果来“集中”有希望的超参数。

建模与调参

线性回归

模型建立

先使用线性回归来查看一下用线性回归模型来拟合我们的题目会有那些缺点。这里使用了 sklearn 的 LinearRegression。

sklearn.linear_model.LinearRegression(fit_intercept=True,normalize=False,copy_X=True,n_jobs=1

model = LinearRegression(normalize=True)
model.fit(data_x, data_y)


model.intercept_, model.coef_

查看训练的线性回归模型的截距与权重

'intercept:'+ str(model.intercept_)sorted(dict(zip(continuous_feature_names, model.coef_)).items(), key=lambda x:x[1], reverse=True)## output
对上下文代码涉及到的函数功能进行简单介绍:
函数
功能
zip()可以将两个可迭代的对象,组合返回成一个元组数据
dict()元组数据构建字典
items()以列表返回可遍历的(键, 值) 元组数组
sort(iterable, cmp, key, reverse)排序函数
iterable指定要排序的list或者iterable
key指定取待排序元素的哪一项进行排序 - 这里x[1]表示按照列表中第二个元素排序
reverse是一个bool变量,表示升序还是降序排列,默认为False(升序)
np.quantile(train_y, 0.9)求train_y 的90%的分位数

下面这个代码是把价格大于90%分位数的部分截断了,就是长尾分布截断

绘制特征v_9的值与标签的散点图,图片发现模型的预测结果(蓝色点)与真实标签(黑色点)的分布差异较大。

且预测值price出现负数,查看price分布 出现长尾分布 不符合正态分布。

线性回归解决方案

1. 进行log变化

2. 进行可视化,发现预测结果与真实值较为接近,且未出现异常状况。

交叉验证

大概说一下sklearn的交叉验证的使用方法, 下文会有很多使用:

verbose日志显示
verbose = 0 为不在标准输出流输出日志信息
verbose = 1 为输出进度条记录
verbose = 2 为每个epoch输出一行记录

K折交叉验证是将原始数据分成K组,将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型,用这K个模型最终的验证集分类准确率的平均数,作为此K折交叉验证下分类器的性能指标。此处,采用五折交叉验证。

data_y = np.log(data_y + 1)# 交叉验证scores = cross_val_score(LinearRegression(normalize=True), X=data_x, \                        y=data_y, cv=5, scoring=make_scorer(mean_absolute_error))
np.mean(scores)

但在事实上,由于我们并不具有预知未来的能力,五折交叉验证在某些与时间相关的数据集上反而反映了不真实的情况。

通过2018年的二手车价格预测2017年的二手车价格,这显然是不合理的,因此我们还可以采用时间顺序对数据集进行分隔。

在本例中,我们选用靠前时间的4/5样本当作训练集,靠后时间的1/5当作验证集,最终结果与五折交叉验证差距不大。

import datetimesample_feature = sample_feature.reset_index(drop=True)split_point = len(sample_feature) // 5 * 4train = sample_feature.loc[:split_point].dropna()val = sample_feature.loc[split_point:].dropna()
train_X = train[continuous_feature_names]train_y_ln = np.log(train['price'] + 1)val_X = val[continuous_feature_names]val_y_ln = np.log(val['price'] + 1)
model = model.fit(train_X, train_y_ln)
  • fill_between()

  • train_sizes - 第一个参数表示覆盖的区域

  • train_scores_mean - train_scores_std - 第二个参数表示覆盖的下限

  • train_scores_mean + train_scores_std - 第三个参数表示覆盖的上限

  • color - 表示覆盖区域的颜色

  • alpha - 覆盖区域的透明度,越大越不透明 [0,1]

预测结果查看:

mean_absolute_error(val_y_ln, model.predict(val_X))

0.19443858353490887

可视化处理

绘制学习率曲线与验证曲线

线性模型

先来对比一下三个lr模型的情况:

models = [LinearRegression(),          Ridge(),          Lasso()]result = dict()for model in models:    model_name = str(model).split('(')[0]    scores = cross_val_score(model, X=train_X, y=train_y_ln, verbose=0, cv = 5, scoring=make_scorer(mean_absolute_error))    result[model_name] = scores    print(model_name + ' is finished')
result = pd.DataFrame(result)result.index = ['cv' + str(x) for x in range(1, 6)]result
结果对比如下:


LinearRegression线性回归:

Lasso回归:L1正则化有助于生成一个稀疏权值矩阵,进而可以用于特征选择。由此发现power与userd_time特征非常重要。

Ridge回归:

L2正则化在拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型,因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。

非线性模型

SVM
通过寻求结构化风险最小来提高学习机泛化能力,基本模型定义为特征空间上的间隔最大的线性分类器支持向量机的学习策略便是间隔最大化。SVR:用于标签连续值的回归问题
SVC:用于分类标签的分类问题

Boosting
一堆弱分类器的组合就可以成为一个强分类器;不断地在错误中学习,迭代来降低犯错概率通过一系列的迭代来优化分类结果,每迭代一次引入一个弱分类器,来克服现在已经存在的弱分类器组合的短板。
Adaboost
整个训练集上维护一个分布权值向量W,用赋予权重的训练集通过弱分类算法产生分类假设(基学习器)y(x), 然后计算错误率,用得到的错误率去更新分布权值向量w,对错误分类的样本分配更大的权值,正确分类的样本赋予更小的权值,每次更新后用相同的弱分类算法产生新的分类假设,这些分类假设的序列构成多分类器,对这些多分类器用加权的方法进行联合,最后得到决策结果
Gradient Boosting
迭代的时候选择梯度下降的方向来保证最后的结果最好。损失函数用来描述模型的'靠谱'程度,假设模型没有过拟合,损失函数越大,模型的错误率越高。如果我们的模型能够让损失函数持续的下降,最好的方式就是让损失函数在其梯度方向下降。

GradientBoostingRegressor()
  • loss - 选择损失函数,默认值为ls(least squres),即最小二乘法,对函数拟合

  • learning_rate - 学习率

  • n_estimators - 弱学习器的数目,默认值100

  • max_depth - 每一个学习器的最大深度,限制回归树的节点数目,默认为3

  • min_samples_split - 可以划分为内部节点的最小样本数,默认为2

  • min_samples_leaf - 叶节点所需的最小样本数,默认为1


MLPRegressor()
参数详解
  • hidden_layer_sizes - hidden_layer_sizes=(50, 50),表示有两层隐藏层,第一层隐藏层有50个神经元,第二层也有50个神经元

  • activation - 激活函数 {‘identity’, ‘logistic’, ‘tanh’, ‘relu’},默认relu

  • identity - f(x) = x

  • logistic - 其实就是sigmod函数,f(x) = 1 / (1 + exp(-x))

  • tanh - f(x) = tanh(x)

  • relu - f(x) = max(0, x)

  • solver - 用来优化权重 {‘lbfgs’, ‘sgd’, ‘adam’},默认adam,

  • lbfgs - quasi-Newton方法的优化器:对小数据集来说,lbfgs收敛更快效果也更好

  • sgd - 随机梯度下降

  • adam - 机遇随机梯度的优化器

  • alpha - 正则化项参数,可选的,默认0.0001

  • learning_rate - 学习率,用于权重更新,只有当solver为’sgd’时使用

  • max_iter - 最大迭代次数,默认200

  • shuffle - 判断是否在每次迭代时对样本进行清洗,默认True,只有当solver=’sgd’或者‘adam’时使用

XGBRegressor梯度提升回归树,也叫梯度提升机

  • 采用连续的方式构造树,每棵树都试图纠正前一棵树的错误

  • 与随机森林不同,梯度提升回归树没有使用随机化,而是用到了强预剪枝

  • 从而使得梯度提升树往往深度很小,这样模型占用的内存少,预测的速度也快

from sklearn.linear_model import LinearRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.neural_network import MLPRegressor
from xgboost.sklearn import XGBRegressor
from lightgbm.sklearn import LGBMRegressor


models = [LinearRegression(),
          DecisionTreeRegressor(),
          RandomForestRegressor(),
          GradientBoostingRegressor(),
          MLPRegressor(solver='lbfgs', max_iter=100),
          XGBRegressor(n_estimators = 100, objective='reg:squarederror'),
          LGBMRegressor(n_estimators = 100)]


result = dict()
for model in models:
    model_name = str(model).split('(')[0]
    scores = cross_val_score(model, X=train_X, y=train_y_ln, verbose=0, cv = 5, scoring=make_scorer(mean_absolute_error))
    result[model_name] = scores
    print(model_name + ' is finished')


result = pd.DataFrame(result)
result.index = ['cv' + str(x) for x in range(1, 6)]
result

各模型结果:

虽然随机森林模型在此时取得较好的效果,但LGB的效果与其相差不大。对LGB进行调参后结果会得到提高,下面对LGB进行简介。

LightGBM使用的是histogram算法,占用的内存更低,数据分隔的复杂度更低。思想是将连续的浮点特征离散成k个离散值,并构造宽度为k的Histogram。然后遍历训练数据,统计每个离散值在直方图中的累计统计量。在进行特征选择时,只需要根据直方图的离散值,遍历寻找最优的分割点。
LightGBM采用leaf-wise生长策略:每次从当前所有叶子中找到分裂增益最大(一般也是数据量最大)的一个叶子,然后分裂,如此循环。因此同Level-wise相比,在分裂次数相同的情况下,Leaf-wise可以降低更多的误差,得到更好的精度。

Leaf-wise的缺点是可能会长出比较深的决策树,产生过拟合因此LightGBM在Leaf-wise之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合。

参数:
  • num_leaves - 控制了叶节点的数目,它是控制树模型复杂度的主要参数,取值应 <= 2 ^(max_depth)

  • bagging_fraction - 每次迭代时用的数据比例,用于加快训练速度和减小过拟合

  • feature_fraction - 每次迭代时用的特征比例,例如为0.8时,意味着在每次迭代中随机选择80%的参数来建树,boosting为random forest时用

  • min_data_in_leaf - 每个叶节点的最少样本数量。它是处理leaf-wise树的过拟合的重要参数。将它设为较大的值,可以避免生成一个过深的树。但是也可能导致欠拟合

  • max_depth - 控制了树的最大深度,该参数可以显式的限制树的深度

  • n_estimators - 分多少颗决策树(总共迭代的次数)

  • objective - 问题类型

    • regression - 回归任务,使用L2损失函数

    • regression_l1 - 回归任务,使用L1损失函数

    • huber - 回归任务,使用huber损失函数

    • fair - 回归任务,使用fair损失函数

    • mape (mean_absolute_precentage_error) - 回归任务,使用MAPE损失函数

模型调参

常用的三种调参方法:
  • 贪心调参

  • GridSearchCV调参

  • 贝叶斯调参

这里给出一个模型可调参数及范围选取的参考:

贪心调参

拿当前对模型影响最大的参数调优,直到最优化;再拿下一个影响最大的参数调优,如此下去,直到所有的参数调整完毕。这个方法的缺点就是可能会调到局部最优而不是全局最优,但是省时间省力,巨大的优势面前,可以一试。

objectives = ["rank:map", "reg:gamma", "count:poisson", "reg:tweedie", "reg:squaredlogerror"]max_depths = [1, 3, 5, 10, 15]lambdas = [.1, 1, 2, 3, 4]

best_obj = dict()for obj in objective:    model = LGBMRegressor(objective=obj)    score = np.mean(cross_val_score(model, X=train_X, y=train_y_ln, verbose=0, cv = 5, scoring=make_scorer(mean_absolute_error)))    best_obj[obj] = score    best_leaves = dict()for leaves in num_leaves:    model = LGBMRegressor(objective=min(best_obj.items(), key=lambda x:x[1])[0], num_leaves=leaves)    score = np.mean(cross_val_score(model, X=train_X, y=train_y_ln, verbose=0, cv = 5, scoring=make_scorer(mean_absolute_error)))    best_leaves[leaves] = score    best_depth = dict()for depth in max_depth:    model = LGBMRegressor(objective=min(best_obj.items(), key=lambda x:x[1])[0],                          num_leaves=min(best_leaves.items(), key=lambda x:x[1])[0],                          max_depth=depth)    score = np.mean(cross_val_score(model, X=train_X, y=train_y_ln, verbose=0, cv = 5, scoring=make_scorer(mean_absolute_error)))    best_depth[depth] = score

这里 “count:poisson” 的损失最小, 所以下个参数调试时会加上这个参数

GridSearchCV调参

GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数。但是这个方法适合于小数据集,一旦数据的量级上去了,很难得出结果。这个在这里面优势不大, 因为数据集很大,不太能跑出结果,但是也整理一下,有时候还是很好用的。

parameters = {'objective': objective , 'num_leaves': num_leaves, 'max_depth': max_depth}model = LGBMRegressor()clf = GridSearchCV(model, parameters, cv=5)clf = clf.fit(train_X, train_y)
clf.best_params_
model = LGBMRegressor(objective='regression',                          num_leaves=55,                          max_depth=15)
np.mean(cross_val_score(model, X=train_X, y=train_y_ln, verbose=0, cv = 5, scoring=make_scorer(mean_absolute_error)))
0.13626164479243302

贝叶斯调参

贝叶斯优化用于机器学习调参,主要思想是,给定优化的目标函数(广义的函数,只需指定输入和输出即可,无需知道内部结构以及数学性质),通过不断地添加样本点来更新目标函数的后验分布(高斯过程,直到后验分布基本贴合于真实分布。简单的说,就是考虑了上一次参数的信息,从而更好的调整当前的参数。

与常规的网格搜索或者随机搜索的区别是:

  • 贝叶斯调参采用高斯过程,考虑之前的参数信息,不断地更新先验;

  • 网格搜索未考虑之前的参数信息贝叶斯调参迭代次数少,速度快;网格搜索速度慢,参数多时易导致维度爆炸

  • 贝叶斯调参针对非凸问题依然稳健;网格搜索针对非凸问题易得到局部最优

使用方法:

  • 定义优化函数(rf_cv, 在里面把优化的参数传入,然后建立模型, 返回要优化的分数指标)

  • 定义优化参数

  • 开始优化(最大化分数还是最小化分数等)

  • 得到优化结果

from bayes_opt import BayesianOptimizationdef rf_cv(num_leaves, max_depth, subsample, min_child_samples):    val = cross_val_score(        LGBMRegressor(objective = 'regression_l1',            num_leaves=int(num_leaves),            max_depth=int(max_depth),            subsample = subsample,            min_child_samples = int(min_child_samples)        ),        X=train_X, y=train_y_ln, verbose=0, cv = 5, scoring=make_scorer(mean_absolute_error)    ).mean()    return 1 - valrf_bo = BayesianOptimization(    rf_cv,    {    'num_leaves': (2, 100),    'max_depth': (2, 100),    'subsample': (0.1, 1),    'min_child_samples' : (2, 100)    })rf_bo.maximize()

欢迎扫码关注:

Scikit-learn中MLPRegressor的超参数调优 然后,使用GridSearchCV进行网格搜索,通过交叉验证(cv=5)来评估不同超参数组合的性能,并选择表现最好的超参数组合。在上述代码中,我们使用GridSearchCV得到的最佳超参数组合来构建最终的MLPRegressor模型(best_mlp)。通过以上步骤,我们可以使用scikit-learn中的MLPRegressor模型进行超参数调优,并得到更好的回归结果。完成超参数调优后,我们可以使用最佳超参数组合来构建最终的MLPRegressor模型,并进行预测和评估。希望本文对您有所帮助! 阅读详情

相关推荐

【Python机器学习】零基础掌握MLPRegressor人工神经网络

本次内容聚焦于如何运用MLPRegressor,即多层感知器回归器,解决实际问题。在农业生产中,通过该算法预测作物的病虫害发生概率,以指导农药使用,旨在优化作物健康管理,减少化学物质滥用。算法通过训练模型识别和学习数据中的模式,依据环境因素如气温、湿度和作物种类等来进行预测。该案例通过模拟数据展示了预测过程,并通过数据可视化清晰呈现了模型预测的准确性。整个过程不仅提升了作物管理的智能化水平,也展示了机器学习在农业科技中的应用潜力。

Mr数据杨 1415

Python实现人工神经网络回归模型(MLPRegressor算法)并基于网格搜索(GridSearchCV)进行优化项目实战

Python实现人工神经网络回归模型(MLPRegressor算法)并基于网格搜索(GridSearchCV)进行优化项目实战

张陈亚的博客 1万+

2017全国大学生电子设计大赛B题 | 板球控制系统(四)机械设计相关

转载请注明出处。   转眼2019了诶,可能有些同学又该问了,哇向阳哥,你这个鸽子放的好,转眼大半年了一年都没更新,我也知道啊,说好的源码呢,挖的机械的坑呢?咕咕咕咕我也不想啊,我这不是懒吗!过年有空了,又到了收红包泡妹子玩游戏.......呸,学习准备比赛码代码的时候了,终于有点空闲,于是乎今晚先把机械的大坑填了。     咱话先说在最前面。机械这玩意,靠经验,也考想象力,更要命的还是出了...

王向阳的博客 3万+

【机器学习】04. 神经网络模型 MLPClassifier分类算法与MLPRegressor回归算法(代码注释,思路推导)

【机器学习】04. 神经网络模型 MLPClassifier分类算法与MLPRegressor回归算法(代码注释,思路推导)

MZH 1万+

Python小白也能搞定!用you-get一键下载B站视频合集的保姆级教程

本文为Python新手提供了使用you-get工具一键下载B站视频合集的完整教程。从环境配置、基础下载操作到高级批量下载技巧,详细介绍了如何利用这个开源工具高效获取视频资源,包括解决常见问题和实用优化建议,帮助用户轻松实现离线学习。

weixin_42544663的博客 463

STM32中断实战:用ITR9606红外传感器DIY转速计数器(附完整代码)

本文详细介绍了如何使用STM32中断机制和ITR9606红外传感器DIY高精度转速计数器。从传感器选型、中断配置到抗干扰设计,提供完整的实战指南和优化代码,特别适合嵌入式开发者和硬件工程师快速实现工业级转速检测系统。

weixin_29159613的博客 293

零基础入门数据挖掘-Task4建模调参

本文目录赛题学习目标内容介绍相关原理介绍与推荐代码读取数据线性回归&五折交叉验证&模拟真实业务情况 赛题 零基础入门数据挖掘 - 二手车交易价格预测。 链接:零基础入门数据挖掘 - 二手车交易价格预测 学习目标 了解常用的机器学习模型,并掌握机器学习模型的建模与调参流程。 内容介绍 线性回归模型: (1)线性回归对于特征的要求; (2)处理长尾分布; (3)理解线性回归模型。 模...

ziqi_的博客 616

MTK眼中6G物理层与无线协议的进化之路

提议统一波束和小区级的测量、报告和切换框架/流程,进一步减少移动性切换过程中的中断,采用可扩展框架/流程,允许在不同移动性场景中进行部分用户设备配置更新以实现快速切换,支持用户设备发起的移动性(同步/切换)以降低延迟和因信令交换导致的失败,设计移动性RS以实现空闲状态下的节能和连接状态下的无缝用户体验,实现5G/6G间的无缝互操作移动性,为固定无线接入(FWA)提供潜在增强,构建统一的跨层移动性框架以降低复杂度、减少中断和失败。为适应多样化的流量类型,需要灵活的帧结构和高层时间对齐。

asd199086的博客 1749

零基础入门数据挖掘--Task4 建模调参

主要内容 根据选用模型的特性对数据进行处理,比如线性回归对特征的要求,需要独热编码,需要归一化,处理长尾分布等等 模型性能验证的的一些包的使用:评价函数与目标函数;交叉验证方法;留一验证方法;针对时间序列问题的验证;绘制学习率曲线;绘制验证曲线; 特征选择的方法:直接、过滤、嵌入式(即通过模型输出的结果对特征进行选择,常用有带正则化的线性回归如lasso回归、Ridge回归、和决策树等 进行模型...

weixin_43129146的博客 545

IMU标定中的Allen方差

Allen方差 Allen方差是IMU标定任务中的常用工具。IMU标定可以分为确定性误差和随机误差,确定性误差包括:scale、bias、misalignment。随机误差则主要是高斯白噪声和bias随机游走。Allen方差主要用于标定随机误差。 Allen方差获取 Allen方差的计算方法如下: 保持IMU静止, 采集N个数据点。 将N个点定长分组,常用的交叠式Allen方差如下(n=3): 对于每个子集,计算均值后,计算相邻两组的方差,得到的时间-方差曲线即为Allen方差。 Alle

realjc的博客 5738

BMS开发避坑指南:如何用ADBMS6815实现0.03%精度的电池采样?

本文深入解析了如何利用ADBMS6815等高精度AFE芯片,在车规级BMS开发中实现0.03%级别的电池电压采样精度。文章从芯片选型、硬件设计、软件配置、算法优化到系统验证,提供了一套完整的实战指南,帮助工程师系统性地提升BMS测量精度,从而保障电池安全、延长寿命并增强产品竞争力。

weixin_28314575的博客 135

零基础入门数据挖掘 Task4:调参建模

零基础入门数据挖掘 Task4:调参建模

RexT1的博客 226

PyCharm安装PyQt5及工具(Qt Designer、PyUIC、PyRcc)详细教程来了

Qt是常用的用户界面设计工具,而在Python中则使用PyQt这一工具包,它是Python编程语言和Qt库的成功融合。这篇博文通过图文详细介绍在PyCharm中如何完整优雅地安装配置PyQt5的所有工具包,主要内容包括PyQt5、PyQt5-tools的依赖包安装和Qt Designer、PyUIC、PyRcc三个工具的设置。最后简单演示了PyQt5的调用方式及三个工具的使用方法。

Python966的博客 3万+

Datawhale 零基础入门数据挖掘- 建模与调参

Task4 建模与调参 此部分为零基础入门数据挖掘之心电图分类的 Task4 建模调参部分,带你来了解各种模型以及模型的评价和调参策略,欢迎大家后续多多交流。 赛题:零基础入门数据挖掘 - 心电图分类预测 项目地址: 比赛地址: 4.1 学习目标 学习机器学习模型的建模过程与调参流程 完成相应学习打卡任务 4.2 内容介绍 逻辑回归模型: 理解逻辑回归模型; 逻辑回归模型的应用; 逻辑回归的优缺点; 树模型: 理解树模型; 树模型的应用; 树模型的优缺点; 集成模型 基于baggi

weixin_46435816的博客 264

实战:RK3568 Android14 调试 ES8388 音频驱动 (MIC 篇)

这个板子的MIC设计使用了硬件自动切换方案,极大简化了软件层面的逻辑。我们不需要根据耳机插拔事件去编写复杂的路由切换代码,只需要守住 LIN1/RIN1 这一个入口,配置好增益,剩下的交给那颗 SGM3157 芯片即可。祝您的录音功能调试顺利!

qq_33427070的博客 1684

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

「建模调参」之零基础入门数据挖掘

Datawhale作者:徐韬,Datawhale优秀学习者摘要:对于数据挖掘项目,本文将学习如何建模调参?从简单的模型开始,如何去建立一个模型;如何进行交叉验证;如何调节参数优化...

Datawhale 1344

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

零基础入门数据挖掘系列之「建模调参」

模型调参基于特征工程所构建的模型上限来优化模型。由于模型的不同和复杂度,模型的参数数量也都不一样。线性模型需要调整正则化的系数,而对于非线性模型,例如随机森林和LGB等模型,需要调节的参数增多。模型调参的目的就是提升模型的性能度量。对于回归算法,我们要降低模型在未知的数据上的误差;对于分类算法,我们要提高模型在未知数据上的准确率。回归分析回归分析是一种统计学上分析数据的方法,目的在于了解两个或多个变量间是否相关、相关方向与强度,并建立数学模型。

gangyikeji的博客 1183

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Datawhale 零基础入门数据挖掘-Task4 建模调参 四、建模与调参

Datawhale 零基础入门数据挖掘-Task4 建模调参——四、建模与调参4.1 学习目标4.2 内容介绍4.3 相关原理介绍与推荐4.3.1 线性回归模型4.3.2 决策树模型4.3.3 GBDT模型4.3.4 XGBoost模型4.3.5 LightGBM模型4.3.6 推荐教材: 地址:https://tianchi.aliyun.com/notebook-ai/detail?spm=5...

yalipf的博客 484

零基础入门数据挖掘——建模调参

建模调参内容介绍代码读取数据线性回归 & 五折交叉验证 & 模拟真实业务情况建模五折交叉验证模拟真实业务情况多种模型对比 本篇博客为参加Datawhale零基础入门数据挖掘-Task4 建模调参 内容介绍 线性回归模型:线性回归对于特征的要求;处理长尾分布;理解线性回归模型; 模型性能验证:评价函数与目标函数;交叉验证方法;留一验证方法;针对时间序列问题的验证;绘制学习率曲线;绘...

楚天云 298

【零基础入门数据挖掘】-建模调参

Datawhale作者:徐韬,Datawhale优秀学习者摘要:对于数据挖掘项目,本文将学习如何建模调参?从简单的模型开始,如何去建立一个模型;如何进行交叉验证;如何调节参数优化...

fengdu78的博客 579

Datawhale零基础入门数据挖掘-Task4建模调参

Datawhale零基础入门数据挖掘-Task4建模调参4.1学习目标4.2内容介绍4.3相关原理介绍与推荐4.3.1线性回归模型4.3.2决策树模型4.3.3 GBDT模型4.3.4 XGBoost模型4.3.5 LightGBM模型4.3.6推荐教材:4.4代码示例4.4.1 读取数据4.4.2 线性回归 & 五折交叉验证 & 模拟真实业务情况4.4.2 - 1 简单建模4.4...

weixin_45661573的博客 294

数据挖掘 建模调参 Datawhale 零基础入门数据挖掘-Task4 建模调参

** Datawhale 零基础入门数据挖掘-Task4 建模调参 4.2 内容介绍 线性回归模型: 线性回归对于特征的要求; 处理长尾分布; 理解线性回归模型; 模型性能验证: 评价函数与目标函数; 交叉验证方法; 留一验证方法; 针对时间序列问题的验证; 绘制学习率曲线; 绘制验证曲线; 嵌入式特征选择: Lasso回归; Ridge回归; 决策树; 模型对比: 常用线性模型; 常用非线性模...

weixin_44064434的博客 380

Datawhale 零基础入门数据挖掘-Task4 建模调参

文章目录 赛题:零基础入门数据挖掘 - 二手车交易价格预测

FeiHuoCai的博客 342
上一篇: 数据挖掘竞赛指南:曾经的数据挖掘少年,如今的阿里算法大佬
下一篇: 数学推导+纯Python实现机器学习算法:GBDT
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值