十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
用open命令打开你要读取的文件,返回一个文件对象
为坡头等地区用户提供了全套网页设计制作服务,及坡头网站建设行业解决方案。主营业务为成都做网站、网站设计、坡头网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
然后在这个对象上执行read,readlines,readline等命令读取文件
或使用for循环自动按行读取文件
feaVet相当于是代数的作用,也可以用其他的字符串取代
for featVec in dataSet:遍历列表中的每一行,featVec[-1]是这一行的最后一列的值
[example[i] for example in dataSet] 选取第i+1列
在硬化函数中,输入应力-应变曲线屈服后,该曲线相应的坐标。比如q345钢材应力应变曲线(二次流朔模型), (0 0)
(1.675 345 )(该点q345屈服)( 16.75 345 ) (167.5 552),在硬化函数中输入后面三个点的坐标就行了。
LightGBM中实现了哪些梯度增强方法,它们有什么区别?一般来说,哪些参数是重要的?哪些正则化参数需要调整?如何调整lightGBM参数在python?梯度提升的方法
使用LightGBM,你可以运行不同类型的渐变增强提升方法。你有:GBDT、DART和GOSS,这些可以通过“boosting”参数指定。
在下一节中,我将对这些方法进行解释和比较。
梯度提升决策树(GBDT)
该方法是本文首先提出的传统梯度提升决策树,也是XGBoost和pGBRT等优秀库背后的算法。
由于其精度高、效率高、稳定性好,目前已得到广泛的应用。你可能知道gbdt是一个决策树的集合模型但是它到底是什么意思呢?
让我来告诉你要点。
它基于三个重要原则:
弱学习者(决策树)梯度优化提升技术所以在gbdt方法中,我们有很多决策树(弱学习者)。这些树是按顺序构建的:
首先,树学习如何适应目标变量第二棵树学习如何适合残差(差异)之间的预测,第一棵树和地面真相第三棵树学习如何匹配第二棵树的残差,以此类推。所有这些树都是通过传播整个系统的误差梯度来训练的。
gbdt的主要缺点是,在每个树节点中找到最佳分割点非常耗时,而且会消耗内存。其他的提升方法试图解决这个问题。
DART梯度提升
在这篇优秀的论文中(arxiv/1505.01866),你可以学习所有关于DART梯度提升的东西,这是一种使用dropout(神经网络中的标准)的方法,来改进模型正则化和处理一些其他不太明显的问题。
也就是说,gbdt存在过度专门化(over-specialization)的问题,这意味着在以后的迭代中添加的树往往只会影响对少数实例的预测,而对其余实例的贡献则可以忽略不计。添加dropout会使树在以后的迭代中更加难以专门化那些少数的示例,从而提高性能。
lgbm goss基于梯度的单边采样
事实上,将该方法命名为lightgbm的最重要原因就是使用了基于本文的Goss方法。Goss是较新的、较轻的gbdt实现(因此是“light”gbm)。
标准的gbdt是可靠的,但在大型数据集上速度不够快。因此goss提出了一种基于梯度的采样方法来避免搜索整个搜索空间。我们知道,对于每个数据实例,当梯度很小时,这意味着不用担心数据是经过良好训练的,而当梯度很大时,应该重新训练。这里我们有两个方面,数据实例有大的和小的渐变。因此,goss以一个大的梯度保存所有数据,并对一个小梯度的数据进行随机抽样(这就是为什么它被称为单边抽样)。这使得搜索空间更小,goss的收敛速度更快。
让我们把这些差异放在一个表格中:
注意:如果你将增强设置为RF,那么lightgbm算法表现为随机森林而不是增强树! 根据文档,要使用RF,必须使用baggingfraction和featurefraction小于1。
正则化
在这一节中,我将介绍lightgbm的一些重要的正则化参数。显然,这些是您需要调优以防止过拟合的参数。
您应该知道,对于较小的数据集(10000条记录),lightGBM可能不是最佳选择。在这里,调优lightgbm参数可能没有帮助。
此外,lightgbm使用叶向树生长算法,而xgboost使用深度树生长算法。叶向方法使树的收敛速度更快,但过拟合的几率增加。
注意:如果有人问您LightGBM和XGBoost之间的主要区别是什么?你可以很容易地说,它们的区别在于它们是如何实现的。
根据lightGBM文档,当面临过拟合时,您可能需要做以下参数调优:
使用更小的max_bin使用更小的num_leaves使用mindatainleaf和minsumhessianin_leaf通过设置baggingfraction和baggingfreq使用bagging_freq通过设置feature_fraction使用特征子采样使用更大的训练数据尝试lambdal1、lambdal2和mingainto_split进行正则化尝试max_depth以避免树的深度增长在下面的部分中,我将更详细地解释这些参数。
lambda_l1
Lambdal1(和lambdal2)控制l1/l2,以及mingainto_split用于防止过拟合。我强烈建议您使用参数调优(在后面的小节中讨论)来确定这些参数的最佳值。
num_leaves
numleaves无疑是控制模型复杂性的最重要参数之一。通过它,您可以设置每个弱学习者拥有的叶子的最大数量。较大的numleaves增加了训练集的精确度,也增加了因过度拟合而受伤的几率。根据文档,一个简单的方法是numleaves = 2^(maxdepth)但是,考虑到在lightgbm中叶状树比层次树更深,你需要小心过度拟合!因此,必须同时使用maxdepth调优numleaves。
子采样
通过子样例(或bagging_fraction),您可以指定每个树构建迭代使用的行数百分比。这意味着将随机选择一些行来匹配每个学习者(树)。这不仅提高了泛化能力,也提高了训练速度。
我建议对基线模型使用更小的子样本值,然后在完成其他实验(不同的特征选择,不同的树结构)时增加这个值。
feature_fraction
特征分数或子特征处理列采样,LightGBM将在每次迭代(树)上随机选择特征子集。例如,如果将其设置为0.6,LightGBM将在训练每棵树之前选择60%的特性。
这个功能有两种用法:
可以用来加速训练吗可以用来处理过拟合吗
max_depth
该参数控制每棵经过训练的树的最大深度,将对:
num_leaves参数的最佳值模型的性能训练时间注意,如果您使用较大的max_depth值,那么您的模型可能会对于训练集过拟合。
max_bin
装箱是一种用离散视图(直方图)表示数据的技术。Lightgbm在创建弱学习者时,使用基于直方图的算法来寻找最优分割点。因此,每个连续的数字特性(例如视频的视图数)应该被分割成离散的容器。
此外,在这个GitHub repo(huanzhang12/lightgbm-gpu)中,你可以找到一些全面的实验,完全解释了改变max_bin对CPU和GPU的影响。
如果你定义maxbin 255,这意味着我们可以有255个唯一的值每个特性。那么,较小的maxbin会导致更快的速度,较大的值会提高准确性。
训练参数
当你想用lightgbm训练你的模型时,一些典型的问题可能会出现:
训练是一个耗时的过程处理计算复杂度(CPU/GPU RAM约束)处理分类特征拥有不平衡的数据集定制度量的需要需要对分类或回归问题进行的调整在本节中,我们将尝试详细解释这些要点。
num_iterations
Num_iterations指定增强迭代的次数(要构建的树)。你建立的树越多,你的模型就越精确,代价是:
较长的训练时间过拟合的可能性更高从较少的树开始构建基线,然后当您想从模型中挤出最后的%时增加基线。
建议使用更小的learningrate和更大的numiteration。此外,如果您想要更高的numiteration,那么您应该使用earlystopping_rounds,以便在无法学习任何有用的内容时停止训练。
earlystoppingrounds
如果验证度量在最后一轮停止后没有改进,此参数将停止训练。这应该与一些迭代成对地进行定义。如果你把它设置得太大,你就增加了过拟合的变化(但你的模型可以更好)。
经验法则是让它占num_iterations的10%。
lightgbm categorical_feature
使用lightgbm的优势之一是它可以很好地处理分类特性。是的,这个算法非常强大,但是你必须小心如何使用它的参数。lightgbm使用一种特殊的整数编码方法(由Fisher提出)来处理分类特征
实验表明,该方法比常用的单热编码方法具有更好的性能。
它的默认值是“auto”,意思是:让lightgbm决定哪个表示lightgbm将推断哪些特性是绝对的。
它并不总是工作得很好,我强烈建议您简单地用这段代码手动设置分类特性
cat_col = dataset_name.select_dtypes(‘object’).columns.tolist()
但是在幕后发生了什么,lightgbm是如何处理分类特征的呢?
根据lightgbm的文档,我们知道树学习器不能很好地使用一种热编码方法,因为它们在树中深度生长。在提出的替代方法中,树形学习器被最优构造。例如,一个特征有k个不同的类别,有2^(k-1) -1个可能的划分,通过fisher方法,可以改进到k * log(k),通过找到分类特征中值排序直方图的最佳分割方式。
isunbalance vs scalepos_weight
其中一个问题,你可能面临的二分类问题是如何处理不平衡的数据集。显然,您需要平衡正/负样本,但如何在lightgbm中做到这一点呢?
lightgbm中有两个参数允许你处理这个问题,那就是isunbalance和scalepos_weight,但是它们之间有什么区别呢?
当您设置Is_unbalace: True时,算法将尝试自动平衡占主导地位的标签的权重(使用列集中的pos/neg分数)
如果您想改变scaleposweight(默认情况下是1,这意味着假设正负标签都是相等的),在不平衡数据集的情况下,您可以使用以下公式来正确地设置它
sample_pos_weight = number of negative samples / number of positive samples
lgbm函数宏指令(feaval)
有时你想定义一个自定义评估函数来测量你的模型的性能,你需要创建一个“feval”函数。
Feval函数应该接受两个参数:
preds 、train_data
并返回
evalname、evalresult、ishigherbetter
让我们一步一步地创建一个自定义度量函数。
定义一个单独的python函数
def feval_func(preds, train_data): # Define a formula that evaluates the results return ('feval_func_name', eval_result, False)
使用这个函数作为参数:
print('Start training...') lgb_train = lgb.train(..., metric=None, feval=feval_func)
注意:要使用feval函数代替度量,您应该设置度量参数 metric “None”。
分类参数与回归参数
我之前提到的大多数事情对于分类和回归都是正确的,但是有些事情需要调整。
具体你应该:
lightgbm最重要的参数
我们已经在前面的部分中回顾并了解了有关lightgbm参数的知识,但是如果不提及Laurae令人难以置信的基准测试,那么关于增强树的文章将是不完整的。
您可以了解用于lightGBM和XGBoost的许多问题的最佳默认参数。
你可以查看这里,但一些最重要的结论是:
注意:绝对不要理会任何参数值的默认值,并根据您的问题进行调整。 也就是说,这些参数是超参数调整算法的一个很好的起点。
Python中的Lightgbm参数调整示例
最后,在解释完所有重要参数之后,该进行一些实验了!
我将使用最受欢迎的Kaggle竞赛之一:Santander Customer Transaction Prediction. 交易预测
我将使用本文介绍如何在任何脚本中的Python中运行超参数调整。
在开始之前,一个重要的问题! 我们应该调整哪些参数?
请注意您要解决的问题,例如,Santander 数据集高度不平衡,在调整时应考虑到这一点!
一些参数是相互依赖的,必须一起调整。 例如,mindatainleaf取决于训练样本和numleaves的数量。
注意:为超参数创建两个字典是一个好主意,一个字典包含您不想调整的参数和值,另一个字典包含您想要调整的参数和值范围。
SEARCH_PARAMS = {'learning_rate': 0.4, 'max_depth': 15, 'num_leaves': 20, 'feature_fraction': 0.8, 'subsample': 0.2} FIXED_PARAMS={'objective': 'binary', 'metric': 'auc', 'is_unbalance':True, 'boosting':'gbdt', 'num_boost_round':300, 'early_stopping_rounds':30}
谷歌的AlphaGo与柯杰的大战已经结束数日,而DeepMind承诺的50分棋谱也已经公布,而作为当前最先进的计算机“技术”,有限元方法有没有与机器学习(人工智能)进一步结合并碰发出绚丽的“火花”呢??
答案是肯定的!!!
什么是人工智能
人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。
机器学习是人工智能的一个分支,简单地说,就是通过算法,使机器能从大量历史数据中学习规律,从而对新的样本做智能识别或对未来进行预测。
常见的机器学习算法如:
✔神经网络(Neural Network)
✔支持向量机(Support Vector Machines, SVM)Boosting
✔决策树(Decision Tree)
✔随机森林(Random Forest)
✔贝叶斯模型(Bayesian Model)等。
早期的机器学习算法由于受到理论模型和计算资源的限制,一般只能进行浅层学习,只在搜索排序系统、垃圾邮件过滤系统、内容推荐系统等地方有所应用。
而之后发生的几件事,掀起了深度学习的浪潮。一件是2006年,加拿大多伦多大学教授Hinton和他的学生Salakhutdinov在Science上发表了一篇文章,揭示了具有多个隐层的神经网络(即深度神经网络)优异的学习性能,并提出可以通过“逐层初始化”技术,来降低深度学习网络训练的难度;
第二件事是在2012年 底,Geoff Hinton 的博士生 Alex Krizhevsky、Ilya Sutskever利用卷积神经网络(Convolutional Neural Network, CNN)在图片分类的竞赛 ImageNet 上,击败了拥有众多人才资源和计算资源的Google,拿到了第一名。
如今机器学习已深入到包括语音识别,图像识别,数据挖掘等诸多领域并取得了瞩目的成绩。
有限元法的发展简史
有限元方法(FEA)即有限单元法,它是一种数值分析(计算数学)工具,但不是唯一的数值分析工具。在工程领域还有其它的数值方法,如:有限差分法、边界元方法、有限体积法。
有限单元法已成为一种强有力的数值解法来解决工程中遇到的大量问题,其应用范围从固体到流体,从静力到动力,从力学问题到非力学问题。事实上,有限单元法已经成为在已知边界条件和初始条件下求解偏微分方程组的一般数值方法。
有限单元法在工程上的应用属于计算力学的范畴,而计算力学是根据力学中的理论,利用现代电子计算机和各种数值方法,解决力学中的实际问题的一门新兴学科。它横贯力学的各个分支,不断扩大各个领域中力学的研究和应用范围,同时也在逐渐发展自己的理论和方法。
神经网络与力学
其实,在深度学习浪潮掀起之前,力学和工程领域早已开始在计算力学研究中结合神经网络模型,开发出更优的算法,一个典型的例子便是有限元神经网络模型。
由于在实际工程问题中存在大量的非线性力学现象,如在结构优化问题中,需要根据需求设计并优化构件结构,是一类反问题,这些非线性问题难以用常规的方法求解,而神经网络恰好具有良好的非线性映射能力, 因而可得到比一般方法更精确的解。
将有限元与神经网络结合的方法有很多,比如针对复杂非线性结构动力学系统建模问题,可以将线性部分用有限元进行建模,非线性构件用神经网络描述(如输入非线性部件状态变量,输出其恢复力),再通过边界条件和连接条件将有限元模型部分和神经网络部分结合,得到杂交模型。
另一种方法是首先通过有限元建立多种不同的模型,再将模态特性(即最终需要达到的设计要求)作为输入变量,将对应的模型结构参数作为输入变量,训练神经网络,利用神经网络的泛化特性,得到设计参数的修正值。
结合Monter Carlo方法,进行多组有限元分析,将数据输入神经网络中进行训练,可以用来分析结构的可靠度。
已有研究成果
[1]余凯,贾磊,陈雨强,徐伟. 深度学习的昨天、今天和明天[J]. 计算机研究与发展,2013,09:1799-1804.
[2]周春桂,张希农,胡杰,谢石林. 基于有限元和神经网络的杂交建模[J]. 振动工程学报,2012,01:43-48.
[3]费庆国,张令弥. 基于径向基神经网络的有限元模型修正研究[J]. 南京航空航天大学学报,2004,06:748-752.
[4]许永江,邢兵,吴进良. 基于有限元-神经网络-Monte-Carlo的结构可靠度计算方法[J]. 重庆交通大学学报(自然科学版),2008,02:188-190+216.
未来的一些方向
1、图形显示方面(有限元与ARVR)
随着有限元计算涉及的领域以及计算的规模不断增大,计算结果的高效、高质量的前后处理也随之成为了一个问题。
ARVR在图形化数据展示方面,将我们从显示屏解放出来,可以以一种更加直观的方式查看计算分析数据,未来在分析结果VR展示方面,会有较大的突破。
国内也有学者已经展开了相关方面的研究,比如《虚拟现实环境中有限元前后处理功能实现》等论文,有限元虚拟处理技术(FEMVR)也开始逐步进入相关软件领域,例如:ANSYS COMSOL可以和MATLAB做交互,新版MATLAB内置了一些人工智能算法。
2、有限元与大数据、云计算
计算规模增大,伴随着计算机能力的提升,随之而来的云计算,解脱了对于计算机硬件的束缚,对于可以放开规模与数量的分析计算,有限元与大数据以及云计算的碰撞,对于未来问题的解决,将有一个质的飞跃,量变到质变的直观体现,在有限元与大数据中会有一个绚丽的展示。
3、有限元与人工智能
人工智能作为全球热的技术,与“古老”的有限元之间,相信可以在老树上发新芽,而我们可以欣喜的看到,相关的研究也已经开展,期待未来对于现实问题的解决,能有更好的更优的方案。
4、CAD数据与CAE数据的无缝对接
目前等几何分析(Isogeometric Analysis, IGA)的发展热度来看,将CAD中用于表达几何模型的NURBS基函数作为形函数,克服FEA中模型精度损失的问题,实现CAD和CAE的无缝结合,是一个很有前途和潜力的发展方向。
5、CAE与MBD的深度融合
未来CAEFEM可能会与多体动力学仿真(MBS)软件深度整合起来。实际系统中某些运动部件的弹性无法忽略,甚至是主要动力学行为的来源,所以就产生了柔性多体动力学仿真这个需求,这样只需要定义相关部件的受力和边界条件,其余的都是内部作用,仿真即节省工作量又较为真实可信。而且现在的确有很多MBS软件里面可以把部件建成弹性体,如LMS Virtual Lab,Simpack等等,但过程没有那么傻瓜;除了简单的梁、轴等零件,复杂形状的零件要依赖FEM软件事先生成的数据文件。
6、网格工作的智能化,傻瓜化
将来对弹性体建模可能更加傻瓜,先把刚性多体系统模型建起来,然后在建模环境(前处理)中直接make body flexible,系统可以根据这个部件的形状、材料、边界条件等选择合适的网格类型,并把运动和力的作用点couple到对应的节点(组)上。比如说汽车悬挂系统仿真,在一个工作环境下就能把某个部件的应力校核给做了,而不需要说搞多体建模的人要把边界力生成一个load case再发给专门的FEM工程师去做。
(部分来自知乎)
如何追上有限元的发展
任何技术的进步,都要在实践中展示技术的威力,有限元的发展,会随着技术的进步,特别是计算机技术的进步,在未来无论是应用软件的研究还是智能程序的开发,都将有无限的机会与可能。
积极学习新技术,新方法,在应用领域,关注有限元相关软件的新功能。
1、了解热点、跟踪前沿
2、结合实际拓展应用
3、掌握自动化相关技术
想要更多,点击此处