Question 1001840: XGBoost为什么可以通过叶子节点的权值w的L2模平方来控制树的复杂度?
统计/机器学习Answer
这个是xgboost作者陈天骐关于xgboost的ppt,可以看一看
https://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf
节点的权值作为惩罚可以防治模型过于细化。因为分得越细,越容易过拟合。说白了,就是不想让一些点分得太好,好到难以置信。换句话,如果每个叶都分得巨好,那么就需要“陈独秀同学,你先坐下”了。
本质,它是和“叶节点的数量”类似的惩罚,但是不仅防治分得细,还防止分得太好。
听起来有点矛盾,但这的确就是xgboost牛轰轰的思路!
Question 1001889: L2-norm为什么会让模型变得更加简单?
统计/机器学习众所周知,L1-norm通过稀疏规则将部分无用特征的权值置0,可将模型简化。而L2-norm仅仅是将每个特征的权值尽量地去减小,这样怎么就会让模型变得简单了呢?
Answer
我的理解:有规则的数据在特定的特征向量空间里,应该是“简单”(稀疏)的;相对的白噪音,因为没有规律,在任何特征向量空间都是“复杂”(dense)的。比如说固定频率的信号,在傅里叶变换中只有一个非零值,而白噪音的投影全是非零值。
最稀疏的prior应该是L0-norm(数个数),但因为是NP-hard问题,没法求解;然后就用L1-norm(减小绝对值和)去代替L0-norm;L2-norm的洗属性更弱一点,不能允许有大的参数,但是很难让参数为0。
各种Norm都可以让系数变得稀疏,只是强度不同,还有对系数值的分布也不同。比如L2-norm(x)对应的是x满足Guassian分布。L1-norm对应Laplace。
举个例子:一共10个未知数x,Lp-norm(x)=100, p=0,1,2...。你可以看当p等于不同值时,满足以上条件的x的分布。
这要看你怎么理解这个“简单”“复杂”了。
斯坦福的一个讲义里说,在特征都被标准化处理的情况下,回归系数越大,模型的复杂度越大。所以特征系数变成0,模型复杂度会下降;系数变小,当然也是复杂度下降。
平滑也是简单的一种体现
Question 1001891: RBF核的多参数体现在哪?
统计/机器学习看到知乎上一个问题的回答下有『RBF核:主要用于线性不可分的情形。参数多,分类结果非常依赖于参数。』
请问参数多主要体现在哪里呢?公式里面不就一个sigma平方吗?
Answer
不确定题主到底有没有理解。但anyway我可以给更详细的解释,对后来者有帮助也是极好的。
Kernel是用来升维的,其升维的原理在于用极少的计算量计算高维度feature vector的内积。也就是说Kernel一定表示的是feature vector的内积,那么现在的问题就在于Gaussian kernel到底表示了什么feature vector的内积?
请看下面的分解:
所以Gaussian kernel “隐性”(implicitly)地表示了两个无限维度feature的内积……之所以是“隐性”是因为我们单纯通过kernel无法知道feature的具体形式。但可以确定feature的维数。
我试着回答一下我的理解。
『RBF核:主要用于线性不可分的情形。参数多,分类结果非常依赖于参数。』这里的参数是模型的参数(系数)。
『请问参数多主要体现在哪里呢?公式里面不就一个sigma平方吗?』这里的参数是指模型的超参数。
我们调参的时候是调节的超参数。模型自己学习的是参数。
我们知道SVM的kernel function很多时候是用来升维的。
每个维度对应着一个参数(线性方程里每个变量前面的系数),升维之后,参数自然变多了。
Question 1001978: L1正则化和L2正则化的区别?L1为啥具有稀疏性?
统计/机器学习机器学习萌新一枚。
只知道正则化可以用来调节系数权重,处理过拟合
求大佬告知其中的区别,以及L1为啥具有稀疏性?
Answer
L2正则相当于是高斯先验
L1正则相当于是拉普拉斯先验
L1正则化是一范式,而L2正则化是二范式。简单来说在线性模型中,L1的惩罚系数是关于w的一次方,L2的惩罚系数是关于w的平方,类似于$|w|$和$\frac{1}{2}|w|^{2}$
直观上来理解一下, 对损失函数施加 L0/L1/L2 范式约束都会使很多参数接近于0. 但是在接近于0的时候约束力度会有差别. 从导数的角度看, L1正则项 在0附近的导数始终为正负1, 参数更新速度不变. L2 在0附近导数接近于0, 参数更新缓慢. 所以 L1 相比 L2 更容易使参数变成0, 也就更稀疏,
还有就是同样的数,值小的时候,L1范式与l2范式差异不大,值大的时候,L2范式与L1差异大,也就是L2对大数的惩罚力度更大
Question 1002395: 关于node.js的问题
统计/机器学习刚准备毕业出来实习 实习公司的祖传代码 我一运行就会报这个错 有没有大佬能给我解释解释因为啥啊
Answer
Question 1003094: 一个凸函数加上L2正则项之后,它还凸的吗?
统计/机器学习今天在presentation,台下有个同学问了这个问题,一下子有点懵。
求大神解答
Answer
$L_2$本身也是凸的,凸函数和凸函数相加,当然是凸的。(为什么?)
$L_1$本身也是凸的,所以凸函数加上$L_1$也是凸的。
Question 1003568: Bellman equation里没有梯度下降为什么会有学习率?
统计/机器学习 强化学习Q learning的迭代过程需要用到Bellman equation。Bellman equation其中一个变量是学习率,但是这个式子本身并没有涉及到梯度或者梯度下降的概念,为什么会有学习率呢?
Answer
学习率和梯度下降算法并没有直接关系。学习率是指模型根据新样本更新模型参数的“速率”。
比如Q-learning里就是根据一个新的数据点(新的行为和奖励),来更新Q-table里的数值;如果学习率太大,新样本的权重就太大,忽略了历史数据的作用。
Question 1004333: 为什么说LR适合大样本,SVM适合小样本?
统计/机器学习谢谢
Answer
数据矩阵$X$是$d \times n$,$n$为数据点数,$d$为维数。先定义$d \ll n$是大样本,$n \ll d$是小样本。$d \approx n$时,LR和SVM都可用。LR(逻辑回归)有$d$个待求的特征权重$w$,SVM有 $n$个数据点权重$\alpha$。
1. SVM只需要较少的支持向量(权重$\alpha>0$的点)就可以确定分割超平面,而对于LR,当$n<10d$时,有可能会有过拟合问题。
2. 再比较下LR和SVM的训练的计算和空间复杂度。
假定用gradient descent解LR,用Coordinate desent解SVM的dual probelm,它们主要计算量在求梯度。
对于LR,梯度$df/dw=X(h(X^Tw)-y)$, $h()$是sigmiod函数,参考。计算复杂度$\mathcal{O}(ndT)$,$T$是循环次数。
对于SVM, 增量$\delta_i^*=\frac{1-(Q\alpha)_i}{Q_{ii}}$,$Q_{ij}=y_iy_jk(x_i,x_j)$,参考。计算复杂度$\mathcal{O}(n^2T)$。如果需要存储kernel distance matrix$K$,空间复杂度是$\mathcal{O}(n^2)$。
3. 应该反过来说,因为过拟合,小样本不适合LR,需要降维;因为计算和空间复杂度,大样本不适合SVM,需要预处理,减小样本数。
4.zl_pku提到LR可以online training,SVM也可以online。比如找出的support vectors加新数据再算SVM。
SVM不适合大样本,因为计算的原因,SVM会非常慢。SVM适合小样本是因为SVM只由支持向量决定,所以样本多少对最终的支持向量影响不大。
LogisticRegression适合大样本是因为我们可以用在线数值方法进行迭代求解,比如随机梯度下降,这样速度很快也非常适合并行计算。但是LogisticRegression也同样适合小样本,只要满足样本数量是变量数量的10倍以上就够了。
Question 1004352: SVM和LR适合稀疏数据吗?
统计/机器学习如题...两个中有没有哪个更加适合高维稀疏数据?
Answer
SVM受高维和稀疏的困挠比较小,毕竟它只在乎支持向量。
LR受高维和稀疏影响比较大,但是一般加上正则之后,比如Lasso,效果也不错。
和楼上看法不同, 如果高维和稀疏对LR影响大,电商为什么都用它做CTR预估?(上亿维的超稀疏)
Question 1004355: 关于大规模稀疏矩阵的问题
统计/机器学习最近在做轨迹大数据的相关工作,在建模的时候发现状态转移矩阵非常巨大,size = 6w * 5 * 6w ,创建时直接内存报错,矩阵是稀疏矩阵,有什么好的方法可以解决吗?
Answer
6w * 5 * 6w?张量还是矩阵?
如果稀疏的,应该有对应的稀疏表达
很多处理方式都是跟具体的编程语言相关的
scipy里有相应的稀疏矩阵函数,参见https://docs.scipy.org/doc/scipy/reference/sparse.html
另外,matlab里也有相应的函数。稀疏矩阵的存储有专门的算法,因为稀疏,所以很多值不用存储。
Question 1004392: gbdt为什么需要泰勒公式展开进行节点分裂计算
统计/机器学习在看gbdt、xgboost原理介绍时,经常可以看到从原始的cost function推导到一个经过泰勒公式展开的公式,最终形态是这个样子:,
文章来源:https://cloud.tencent.com/developer/article/1005611。然后根据这个公式计算哪种feature split能带来最大的cost减少。
但我的问题是,为什么需要推导到这种形态才计算cost的变化呢?原始的cost简单明了:
就是直接带入每个data就可以得到一个cost了,也可以对每种feature split进行计算。
第一个公式的意义何在?
Answer
1.对于regression的square loss,只有二阶导数,你给的两个公式相等,不需要再讨论。
2.对于logistic regression的logistic-loss,两个公式不同:
2.1, 原始loss计算量更大,二阶近似计算量小,还有分割点的近似计算。
2.2 二阶近似解更稳定。
xgboost论文参考论文[12]里讲到用原始loss,存在numerically unstable问题,用二阶近似loss得到的每棵树鲁棒性更强,结果更稳定。
wiki中关于Gentle AdaBoost 和AdaBoost的区别是:
我理解是,本来每棵树学习的是残差。如果是贪婪的学习“准确”的残差,会存在“Z”字型的学习曲线,步长过大,残差的符号会变化,残差会振荡减小,收敛更慢。loss的二阶近似,相当于用牛顿法循环减小残差,(一棵树是一个循环),类似加了正则项,减小了残差符号振荡的可能性。
楼主先区分一下,gbdt用不到二阶导的,xgb在此做了修改之后用的二阶导
Question 1005608: 请教lightGBM中的level wise具体计算步骤是怎样的?
统计/机器学习请教lightGBM中的level wise具体计算步骤是怎样的?
Answer
LGBM应该是leaf wise的吧
leaf-wise是说总是优先选择更好的叶节点哪怕每个子树高度不同,而level-wise是要保证每一层都要长一样多的叶节点。所以说在叶节点总数一样的情况下,leaf-wise训练得精度更好,但也更容易过拟合。
Question 1005636: AB Testing里Geo Hashing是什么意思?
统计/机器学习 AB Test我明白AB Testing的意思,是用来做对照实验的。但是AB Testing里Geo Hashing的概念是什么意思呢?
Answer
AB testing要求A和B的流量都是随机独立的。但是有时候无法建立这样的A和B,geo hashing可以帮助完成。
比如产品投放的城市有n个,每个城市都从1到n被随机编号,然后设计一个hash function把编号hash到{1, 2}。组1的当作A,组2的当作B,这样就实现了一个伪随机的AB testing的设置。
Question 1005894: 生存分析中left censored, right censored有什么区别?
统计/机器学习如题
Answer
Question 1005899: 想请教机器学习能不能解决一个问题
统计/机器学习 应用场景楼主是个物理系学生,最近在做一个模拟:
有ABCDE几个输入参数,每一个都是正数,输入到编程里,最后得出F,G这2个参数,也是正数。
假设有100组这样的数据(ABCDEFG)。
请问能不能把机器学习训练成,输入CDEFG这几个参数后,给出合适的A和B参数?
谢谢各位大哥的指教!
Answer
你的意思是根据CDEFG的数值,得到AB?
你可以用回归的方法,用CDEFG来预测A,以及CDEFG预测B
深度学习里有多对多。如seq2seq,但看起来你这个并非一个序列问题。
其次是数据量实在太少了,100组实在不足以做机器学习,尝试统计方法会比较好。
Question 1005956: AB实验里的灰度实验概念是什么意思?
统计/机器学习 AB Test请教一下各位,AB实验里的灰度实验概念是什么意思?
Answer
灰度实验是在AB实验中从旧版本过度到新版本的过渡阶段。
在传统的AB实验中,我们会把流量或者用户分成两组,一组是A(原版本、对照组)一组是B(新版本、实验组)。然后开始实验并收集指标,如果实验组表现良好,那么新版本将部署在整个网站上。如果一开始B占到整个网站的5%,如果实验成功,那么我们立即会将5%跳到100%,也就是一下从黑跳到白。
灰度实验是如果B效果好,我们将B的占比从5%调整到15%,然后30%慢慢逐步调整到100%。
这个方法的好处是可以保证整体系统的稳定、及早获得用户的意见反馈、降低产品升级所影响的用户范围。
我觉得灰度和AB实验是两回事。
AB实验是为了测试B的效果,效果好就进行,不好的话,新版本就不会上线。
灰度是为了上线,而不是为了测试效果,是为了让整个上线过程进行平稳的过渡,有的是为了软件或者网络上的压力测试。一般来说为了灰度中先开发的那些用户也是有挑选的,而不是随机的。目的和AB是完全不同的。
Question 1005978: 离散随机变量的熵满足的不等式如何证明?
统计/机器学习图中,x为离散随机变量,熵为H(P),|X|为随机变量x取值的个数,H(p)<=log|X|是如何得到的?谢谢!
Answer
因为均匀分布是最大熵分布,当$P(x)=1/n=1/|x|$,此时$H(x)=-n/nlog(1/n)=log(n)$,所以$H(x)<=log(n)$。至于为什么均匀分布是最大熵分布,可以看这里。
Question 1006006: 关于为什么要用GBDT的疑问
统计/机器学习请问各位GBDT相对于直接的Boosting Tree的优势主要在哪里?个人理解是GBDT把对模型预测的损失函数最优化这一步转化为了对损失函数负梯度的平方损失最优化,保证了计算的简单与方向的正确,不知道我的理解是否错误?
如果我的理解大方向基本正确的话,假如在一般问题中我们的损失函数本身就是平方损失,为什么还要用GBDT呢?这样不是多此一举了?
才疏学浅,希望各位不吝赐教!
Answer
那要你说的“直接的Boosting Tree”的定义了。GBDT前的boosting版本是Adaboost,Adaboost用的指数损失函数,然后会根据上一轮的迭代结果去更改每个样本的权重,上一轮错误的分类权重变大,正确的分类样本权重变小。权重的调整也有具体的公式。每个弱分类器自身的权重也是不等的。
GBDT的损失函数是可以是任何(可导)函数。在迭代过程中,GBDT不会去更改样本的权重,而是去直接优化目标函数,以一定的速率(学习率、步长)去拟合一轮又一轮的残差。
Question 1007451: 线性基分类器的XGboost的原理是怎样的?
统计/机器学习看了陈天奇的那篇讲解决策树作为基分类器的xgboost论文,想问问在线性基分类器下,原理是怎么推导的?
Answer
相当于一个sgd的lr模型
Tianqi Chen的论文(https://arxiv.org/pdf/1603.02754.pdf)里好像也没有提到线性分类器
Question 1007525: AB测试样本量的问题
统计/机器学习 AB Test项目上线要AB测试(测试CTR是否大于原来的CTR),假设每天测试有10000人,现在我只统计里面1000人的CTR,问我要连续测试多少天,才能让得到的结论有95%的置信度
Answer
其实你问的就是样本量的问题。样本量是有一套自己的计算公式的
$$S=\frac{\frac{z^2p(1-p)}{e^2}}{1+\frac{z^2p(1-p)}{e^2N}}$$
可以根据上面的式子计算出所需要的样本量$S$。$N$是样本总数,你这里是10000,$z$是z-值,根据95%置信区间,我们知道$z=1.96$,$e$是边际误差,你没有给出,默认是1%吧。$p$是CTR,假设这里是$0.05$。
把数值带进去,可以得到$S\approx1543\gt1000$,所以你一天的数据是不够的。
如果你连续测两天,也就是$N=20000$,此时再计算一遍样本量,得到$S\approx 1672 \lt 2000$,所以两天就够了。
Question 1007533: cvr和ctr的区别是什么?
统计/机器学习 应用场景工业界经常提到的分类模型的场景,一个是cvr另一个是ctr,他们的区别是什么?
Answer
从曝光到点击的过程,计算的就是点击率。比如有1000个人看到这个按钮,其中100个点了,那么点击率就是0.1,点击率就是click-through rate,ctr。
从点击到转化(下单,消费)的过程,计算的是转化率。比如100个点击了产品详情页,最后完成下单的是5个人,那么转化率是0.05,转化率就是conversion rate,cvr。
在广告和推荐场景中, 用户首先会看到平台给他生成的推荐结果, 称为曝光(impression), 用户会有一定的概率作点击(click), 进入详情页. 若果满意的话会购买产品, 称为转化(conversion).
CTR
Click Through Rate. 点击率.
pCTR=p(click∣impression)
CVR
ConVersion Rate. 转化率.
pCVR=p(conversion∣click,impression)
分别是转化率、点击率,点击后不一定产生购买的转化;
Question 1021636: 分类问题中用逻辑回归处理不同输入标签的问题
统计/机器学习一般二分类问题标签取0或1吧,有些时候取-1和1,这样逻辑回归的损失函数就要改变,这样求解的最优解的参数是不是就不一样了?
Answer
SVM有时候用+1和-1。
逻辑回归一般都是1和0,因为逻辑回归模型的预测结果是0到1之间的数,正好就是概率。如果你原始标签是+1,-1,那你在用逻辑回归之前,也要先把-1转成0。
Question 1022319: 小白求教:一样的数据和差不多的代码,线性回归(LinearRegression)为甚麽自己的和书上的准确率差了挺多
统计/机器学习书是python机器学习及实践_从零开始通往kaggle之路
书上的准确率:0.9+ 我的只有0.8+ 不知道怎么肥事
还有这本书为什么要把产品编号也作为一个特征啊?
代码如下(python 3):
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import SGDClassifier
#创建特征列表
column_names = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape', 'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin', 'Normal Nucleoli', 'Mitoses', 'Class']
#采用read_csv函数读取文件,默认用逗号分隔数据
data = pd.read_csv('d:/breast-cancer-wisconsin.data', names=column_names, delimiter=',')
#将?替换为标准缺失值表示
data = data.replace(to_replace='?', value=np.nan)
#删除有空值的行
data = data.dropna(how='any')
#将前10列选为特征。
X = data[column_names[1:10]]
#将Class命名的列取出作为待预测的类别。
y = data[column_names[10]]
# 25%的数据作测试集,75%的数据作训练样本。random_state设定为2019,为了保证每次重新运行获得的训练集和测试集是一样的。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=2019)
#标准化数据
ss=StandardScaler()
X_train=ss.fit_transform(X_train)
X_test=ss.transform(X_test)
# 初始化逻辑斯蒂回归模型和随机梯度参数模型
lr = LinearRegression()
sgdc= SGDClassifier ()
#调用 LinearRegression中的fit函数用来训练模型参数。
lr.fit(X_train, y_train)
#使用训练好的模型lr对X_test进行预测,结果储存在变量lr_y_predict中。
lr_y_predict=lr.predict (X_test)
#调用SGDClassifier中的fit函数用来训练模型参数。
sgdc.fit(X_train, y_train)
#使用训练好的模型sgdc对X_test进行预测结果储存在变量sgdc_y_predict中。
sgdc_y_predict=sgdc.predict(X_test)
#使用逻辑斯蒂回归模型自带的评分函数score获得模型在测试集上的准确性结果。
print('Accuracy of LR Classifier:', lr.score(X_test, y_test))
print('Accuracy of SGDClassifier:', sgdc.score(X_test, y_test))
Answer
1. 贴代码应该用代码块,你这个代码没人能看懂,你应该重新编辑问题
Question 1655942: out of core是什么意思?
统计/机器学习经常看到这个短语out of core,具体在ML领域是什么意思呢?
Answer
core其实就是内存的意思,out-of-core就是不在内存里进行。
没有把全部数据都一次性读取到内存进行处理的方式就是out-of-core。这个概念和online learning或者mini-batch可以认为是差不多的意思。
sklearn的官方文档的解释:“An efficiency strategy where not all the data is stored in main memory at once, usually by performing learning on batches of data.”
来自sofasofa(一个专业的机器学习社区),建议去sofa社区阅读,这里只是记录。防止网站在网络中走失。