将离散型特征进行one-hot编码的作用,是为了让距离计算更合理,但如果特征是离散的,并且不用one-hot编码就可以很合理的计算出距离,那么就没必要进行one-hot编码。
有些基于树的算法在处理变量时,并不是基于向量空间度量,数值只是个类别符号,即没有偏序关系,所以不用进行独热编码。 Tree
Model不太需要one-hot编码: 对于决策树来说,one-hot的本质是增加树的深度。
通过Hash函数的方法,虽然Hash函数的方法,在数据量比较大的时候会有一些冲突,但是这对最后的影响结果不是很大。
user feat + photo feat + combine feat
user 类特征
# user id
# user gender
# user follow
# user like
# user negative
# user click
# user count feature
# user lda
# user lda
# user loc
# user device
# user ad download: 对cvr比较有用
# user ad like
# user installed apps & games label
# user view & like photo label
photo 特征
# photo id
# photo region from ip
# Photo Author
# photo width
# ad category : 有一点用
# photo advertiser info
# ExtractPhotoTitle
# ExtractPhotoCaptionSegment
combine 特征
# UserLevel + Photofeature
# UserLevel + PhotoAuthorfeature
# UserLevel + PhotoRegion
# UserLda + PhotoId
# user region & photo region
# User attribute photo id
# User device photo id
# user like & authorid
# user click & authorid
dense feat + sparse feat :
sparse feat 进一步做 embedding
dense feat 一般是由其他 api 直接提供的 embedding
SMOTE 上采样:通过找到少数类别样本的 k 近邻样本,通过 x n e w = x + r a n d ( 0 , 1 ) ∗ ∣ x − x n ∣ x_{new}=x+rand(0,1)∗∣x−x_n∣ xnew=x+rand(0,1)∗∣x−xn∣来生成新样本。
def py_cpu_nms(dets, thresh):
x1 = dets[:,0]
y1 = dets[:,1]
x2 = dets[:,2]
y2 = dets[:,3]
areas = (y2-y1+1) * (x2-x1+1)
scores = dets[:,4]
keep = []
index = scores.argsort()[::-1]
while index.size >0:
i = index[0] # every time the first is the biggst, and add it directly
keep.append(i)
x11 = np.maximum(x1[i], x1[index[1:]]) # calculate the points of overlap
y11 = np.maximum(y1[i], y1[index[1:]])
x22 = np.minimum(x2[i], x2[index[1:]])
y22 = np.minimum(y2[i], y2[index[1:]])
w = np.maximum(0, x22-x11+1) # the weights of overlap
h = np.maximum(0, y22-y11+1) # the height of overlap
overlaps = w*h
ious = overlaps / (areas[i]+areas[index[1:]] - overlaps)
idx = np.where(ious<=thresh)[0]
index = index[idx+1] # because index start from 1
return keep
数据的先验知识,或者数据进行简单分析能得到
基于变化的算法:即定义一个函数,随着K的改变,认为在正确的K时会产生极值。如Gap
Statistic Jump Statistic 。可以这么理解,给定一个合理的类簇指标,比如平均半径或直径,只要我们假设的类簇的数目等于或者高于真实的类簇的数目时,该指标上升会很缓慢,而一旦试图得到少于真实数目的类簇时,该指标会急剧上升
基于结构的算法:即比较类内距离、类间距离以确定K。这个也是最常用的办法,如使用平均轮廓系数,越趋近1聚类效果越好;如计算类内距离/类间距离,值越小越好;等。其中轮廓系数(silhouette coefficient)。结合了凝聚度和分离度。计算公式如下
其中 [公式] 向量到所有它属于的簇中其它点的距离的平均, [公式] 向量到所有非本身所在簇中其它点的距离的平均距离
基于一致性矩阵的算法:即认为在正确的K时,不同次聚类的结果会更加相似,以此确定K
基于层次聚类:即基于合并或分裂的思想,在一定情况下停止从而获得K
基于采样的算法:即对样本采样,分别做聚类;根据这些结果的相似性确定K。如,将样本分为训练与测试样本;对训练样本训练分类器,用于预测测试样本类别,并与聚类的类别比较
使用Canopy Method算法进行初始划分
softplus:
f ( x ) = l o g ( 1 + e x ) f(x) = log(1+e^x) f(x)=log(1+ex)
softplus可以看作是ReLu的平滑
有机会可以看一下,fastText是一个快速文本分类算法,涉及到Hierarchical Softmax和N-gram
fastText原理和文本分类实战,看这一篇就够了
垃圾回收
python采用的是引用计数机制为主,标记-清除和分代收集两种机制为辅的策略,
它的缺点是需要额外的空间维护引用计数,这个问题是其次的,不过最主要的问题是它不能解决对象的“循环引用”,因此,也有很多语言比如Java并没有采用该算法做来垃圾的收集机制。
当前线程调用 sleep() 函数进入阻塞状态后,在其睡眠时间段内,该线程不会获得执行的机会,即使系统中没有其他可执行的线程,处于 sleep() 中的线程也不会执行,因此 sleep() 函数常用来暂停程序的运行。
sleep()与wait()方法都不占用cpu时间及利用率。
cross_entropy = sum(-y*np.log(y_hat) - (1-y)* np.log(1-y_hat)) / n
dtheta = (1.0/n) * ((y-y_hat)*X)
特征迁移学习是为了寻找源领域和目标领域特征空间中 共同的特征表示,缩小两个领域之间的差异,用于提高目标领域的分类性能。特征迁移学习得到的特征起到了不同领域知识的迁移作用,使用源领域的特征有利于目标领域分类。在眼底图像分类中,特征迁移学习是使用自然图像训练得到的参数初始化网络,通过CNN提取医学图像上的特征作为目标图像的特征,再使用分类器对提取到的特征进行训练。
冒泡排序
选择排序
插入排序
快速排序
归并排序
基数排序
PyTorch基础入门四:PyTorch搭建逻辑回归模型进行分类
xgboost 是GBDT 的工程化实现,此外,显式地将树模型的复杂度作为正则项加在优化目标公式;推导里用到了二阶导数信息,而普通的GBDT只用到一阶;使用column(feature) sampling来防止过拟合;节点分裂算法能自动利用特征的稀疏性(自动缺失值处理)。
FM为每个特征学习一个隐向量,进行二阶特征交叉。
稠密特征加入CTR预估模型的方法
1、把原始的稠密特征直接和全连接层进行连接不和通过词嵌入转化的类别稠密特征进行交叉
2、把原始稠密特征离散化,转换为离散特征,然后和原始类别特征都进行词嵌入,之后再进行特征交叉。
3、对每个原始稠密特征x维护一个词嵌入向量e,然后把原始稠密特征和权重向量相乘得到最终的特征向量,相当于一个稠密特征映射成一个特征向量,之后和类别映射的词嵌入矩阵进行拼接。
4、鲜为人知的Key-Value Memory方法(详细推导见链接)。
极大似然估计,通俗理解来说,就是利用已知的样本结果信息,反推最具有可能(最大概率)导致这些样本结果出现的模型参数值!
换句话说,极大似然估计提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数未知”。
极大似然估计与最大后验概率估计
最大后验概率估计就是最大化在给定数据样本的情况下模型参数的后验概率, 依然是根据已知样本,来通过调整模型参数使得模型能够产生该数据样本的概率最大,只不过对于模型参数有了一个先验假设,即模型参数可能满足某种分布,不再一味地依赖数据样例.
样本不平衡会使得我们的分类模型存在很严重的偏向性,但是从一些常用的指标上又无法看出来。
快手(offer):
一面:
1、kmeans,K值选择,初始点
2、tensorflow原理,keras和他的区别
3、xgboost、正则化、怎么优化,boost算法
4、dropout原理,欠拟合,过拟合
5、分析代码复杂度
6、类别不平衡
7、怎么预处理
8、两个栈实现队列
9、你的职业规划
10、SQL
二面
实现sqrt
最小二乘法原理
怎么打标签
集齐12星座平均需要多少人
12/12+12/11+12/10+…+12/1 ≈ 37.24
sql
作业帮(一面凉):
1、首先自我介绍,没有多余的话,直接做题,一道hard,一道mid(白板定义树,从建树到先、中、后序遍历,后序遍历不允许用网上最容易查到的那种方式),我作为小菜瓜,当然不会,凉凉。
百度(提前批一面挂,正式批三面都面完):
1、说说你的项目,具体一点,数据是什么,为什么这么做,好处是什么,精度?
2、说下boosting算法,你了解的。
3、说一下LR和SVM的区别,要详细,LR和数据分布有没有关系?
4、聚类算法熟悉吗?
5、一个句子的逆序输出,I am a boy? boy a am I?,要bugfree,各种边界问题,特殊情况
6、现在有一亿个样本,你如何找到单词最相似的?
7、假设现在有一万个数据,每个数据被取到的概率是不同的,1/2,1/3,1/100,现在如果是你,你会怎么取这一批数据?,数据有好有坏
8、十进制转2进制的最优化算法?
9、python中 +和join的区别。
10、推荐算法了解吗?你怎么给用户做推荐。
这里特别提醒一句,百度的面试非常重视基础,不要整花里胡哨的,基础啊兄弟们。我二面的时候,机器学习那一套,从预处理到Model,每个细节都讲了,那75min,把我掏干了。
追一科技(一面挂,聊得很开心):
1、Adaboost详细,adaboost的权值和RF比较
2、比赛的介绍
3、boosting算法
4、one-hot编码,以及logn的编码
5、前序,two sum 有序数组
6、卷积神经网络,好处是什么
7、为什么用小卷积核
8、介绍下项目论文
9、分类评价指标,ROC
10、线性回归为什么用均方差
浦发(现场面(offer)):
1、先做题,三四道题目,很简单,全A。然后面试15分钟,我最后还交了体检报告与背调。
小红书(三面挂):
一面:做题,leetcode124题,磕磕绊绊做了出来。然后聊项目,问boosting算法细节,非常细
二面:聊项目,LR公式,设计一个实际模型,我忘记是什么模型了。。。。。。不难
三面:两个open case,①photoshop里面抠图是什么原理?怎么实现的 ②设计一个知乎推荐系统
事实证明,我三面答的不好,凉凉。三面挂的人很少很少。
360(二面挂):
一面:
1、是个妹子面的,问项目,做题目比较简单,二分查找之类的
2、项目+简历,问了很多机器学习基础,LR、SVM、boosting一套细节。
3、调参细节
二面:
很玄学,二面聊得很开心,全基础问题,我也全部答了出来,面经找不到了,但是真的很简单,然后告诉我挂了。
同程艺龙(奇怪的公司,HR加我微信,说这两天给我发offer,现在一个多月了,似乎还必须要去实习,体验不好)
一面:
1、GCN公式推导来一遍,每个参数
2、GBDT和XGboost区别(具体点),为什么GBDT用负梯度当做残差,xgboost你讲讲,要详细,公式
3、xgboost为什么用二阶导
4、牛顿法公式推一遍、要公式
5、假设信息增益函数entropy(x,y),实现特征重要性的计算featureImportce(feature,label)(写代码)
6、用过哪些模型,说说,图自编码器、cnn等你了解深度学习模型
7、CTR怎么做的?MLR懂吗?分词是啥?
8、能不能来实习?不能来实习的话就…(我说,我懂你的意思)
二面:
1、了解FM、FFM吗
2、需要用归一化的模型有哪些
3、RF和GBDT区别、详细一点
4、CTR讲一下,大规模稀疏的特征怎么处理
5、怎么判断过拟合,有哪些方法,dropout和RF,dropout是随机的吗
6、模型的权重和特征的权重怎么处理
7、L1和L2正则,全部内容
8、对统计这一块了解吗?p值是什么
9、聚类算法,聚类怎么确定K值
10、AUC值在广告预测中的指标、NLP了解吗?
11、FM算法、FFM算法讲一讲
华为(打电话叫我转岗,我就投了AI&Cloud的开发,事实证明这个举动真的很蠢)
一面:
1、项目+做题,好像是排列组合的题目。
二面:
面试体验一般。上来问我会不会C,要求必须用C写代码。我说我不会用C,用java行不行,我写出来了。他说java不大行啊,我就不管了,这是我第一次遇见必须用指定语言做题目的。然后问我opencase,海量数据问题,我没答好。我承认我太菜了,我以为堆是数组,结果堆是树。我还和他battle一会,哈哈哈,sorry,的确是我的问题。然后挂掉
电信云(这个就面试体验超级无敌差!!!)
一面:
不问项目不问基础不问技术,叫我写pandas,我说我不记得函数名了,一般随用随查。面试官就很不开心了,然后问我python的边边角角,我又不记得,我只能一路说我不会。一共面了十分钟,甚至我以为我面了一家外包公司,八字不合,拜拜您嘞。
网易互娱(一二三面)
一面:项目+机器学习基础
二面:聊人生聊理想
三面:聊人生聊理想
凉
招行信用卡(二面凉):
一面:项目、深度学习和机器学习区别、过拟合、正则化那些,boosting调参
二面:人工智能趋势、tensorflow用的多吗、接收加班吗、这里我嘴贱,我明明不懂deepFM,我还说了,他让我做个比较推荐算法那些,我不懂。友情提示:不懂得别瞎说
陌陌(这是我体验的比较好的一家,两个面试官超级有水平,点赞+1):
一面:项目非常非常细,细到怀疑人生。正则化、过拟合、boosting、LR公式推导,梯度下降等等
二面:面试官直接说我们这个项目没什么实际意义,哈哈哈,我被怼了还很开心,因为他说的对。然后他还指导我怎么去水论文,我非常感动,真的很nice。
中兴:
聊人生聊理想,然后把我挂了。估计今年中兴都挑花眼了,我这个双非本科当然不行啦。
斗鱼(offer):
两道编程(区间合并),手写tensorflow cnn全套,二分类,机器学习深度学习基础。
阿里测开(offer):
阿里一共四个技术,一轮hr,第一轮技术冒泡排序、二分查找,java基础,线程进程等等;二面没有代码,问我项目,机器学习聊了很多;三面,open case;四面交叉面:比较难,问测试的内容,把我怼的一愣一愣,但好在我水过了。
先更新这么多吧,我想到什么再更新,我真的记不***了。
下面开始技术总结:
1、基础很重要,至少那些model不要求100%,七七八八个大概你要能讲吧。
2、刷题很重要,我是个小菜瓜,我什么都不行,所以没去的了BAT。
3、运气比前两个都重要。
我刷的一些题目,都放在了我的博客:我的博客八月份更新的,可想而知,我有多久没有刷题了,大家不能像我一样菜,不允许喷我,我不能接收你的批评(哼)