数据挖掘----回归算法
线性回归
1、销量预测
2、模型
- 线性 和非线性
问题:
回归 vs.分类中类别概率回归
典型方法:
- 线性回归
-逻辑回归
- Boosting
- 神经网络
回顾:
1、模型是什么? y=wx
b怎么消失了?w和x在多元情况下是什么形式?
w对应的数据结构是什么?
训练过程
2、求w:
1)定义误差err
2)怎么衡量哪条直线最好?
所有点的误差平方和最小最好(学习的目标)
【Loss损失函数】【cost代价函数】
3)求导等于0来求最小值对应的参数
cross validation交叉验证:
逻辑回归:
p(y=1|x)
sigmoid函数
20个取10个球,黑8个,白2个
2)怎么衡量哪条直线最好?最大似然
【Loss损失函数】 【cost代价函数】
只要是概率模型,损失函数都是通过最大似然来的。
概率最大,连乘概率最大。。
变换之后变成了 没面上
当从模型总体随机抽取n组样本观测后,最合理的参数估计量应该使得从模型中抽取该n组样本观测值的概率最大。
导数也叫梯度:
3)求导等于0来求最小值对应的参数w
导数为0不能直接求,需要用到梯度。牛顿方式去求
确定往下走的方向,负梯度;
跨一步才能往下走,步长line search确定步长
driver process ---rescoremanager-- executor process
要预测用户下一个订单会买什么商品?
LR x:user和商品的数据----->>打分(概率)做排序topN N=平均每个订单多
预测有什么用?
我们可以知道用户下一步将会买什么?
1、推荐下一步买的商品
2、如果有很多商品做广告,对应什么样的用户推送什么样的广告
标签数据:
orders,eval_set prior train test
train作为标签数据,
标签数据表示下一个订单中已经产生购买了
如果在train里面的,表示label为1表示命中,否则为0没命中
用LR逻辑回归做什么事情呢?
预测其他的商品对于这个用户在下一个订单中的概率(打分)
p(label=1|x)
最终目标预测一个用户下一个订单会买什么?
给我们是这个订单已经够买了一些商品。
这个订单之前的一个订单
1-10 ,预测第11订单的商品会是什么?
1-9作为训练,10作为预测
1-9产生一个model,用这个模型预测10中会有哪些商品 ,
模型预测:商品集合1
实际第10个订单:实际的商品集合2
orders :用户产生订单的数据,eval_set=prior,train,test
products产品信息的数据
priors:订单对应的产品 有三千万条数据
trains:订单对应的产品,作为最后一个订单里面的商品
dfFeat中eval_set会有哪些或者哪个?prior 32434489
RFormula:
string类型:new OneHotEncoder() 离散值处理,user浏览1(1000),点击行为2(10),加购物车3(5)
[1,0,0,28,175] [0,1,0,30,180] [0,0,1]dense vector
[0,0] [0,1] [1,0] => [] [1:1] [0:1] sparse Vector scipy
sparse vector的结构(7,[0,3],[2.0,1.0])
(向量大小,index具体有值的位置,对应index的value)
(6,[2],[1.0]) = (0,0,1,0,0,0)
import org.apache.spark.ml.linalg.DenseVector
val a = new DenseVector(Array(0,0,1,0,0,0))
a.toSparse
sample采样的形式,6最多的
orders order_dow
import org.apache.spark.ml.feature.OneHotEncoder
val oh = new OneHotEncoder().setInputCol("order_dow").setOutputCol("dow")
val ohDf=oh.transform(orders.selectExpr("cast(order_dow as double)"))
new VectorAssembler() dense 和 sparse 都能做拼接
dataframe: age,hight feature1 feature2
28 175 [28,175] [10000,90] [28,175,10000,90]
30 180 [30,180] [10,2000] [30,180,10,2000]
import org.apache.spark.ml.feature.VectorAssembler
val va = new VectorAssembler().setInputCols(Array("order_dow","dow")).setOutputCol("va")
val vaDf = va.transform(ohDf)
vaDf.show(false)
特征feature feat
label count weight
1 4238001 1 7
0 28196488 7 1
正负样本比例1:7
RFormula:
import org.apache.spark.ml.feature.RFormula
val rformula = new RFormula().setFormula("order_dow~order_dow+dow").setFeaturesCol("features")
val df_r = rformula.fit(ohDf).transform(ohDf)
order_dow(double),dow(sparse vector),label(string)
val df_rtest=df_r.selectExpr("order_dow","dow","cast(label as string) as str")
val rformula = new RFormula().setFormula("order_dow~str").setFeaturesCol("features")
val df_rf = rformula.fit(df_rtest).transform(df_rtest)
结果的参数:
lrModel.coefficients
res29: org.apache.spark.ml.linalg.Vector = [-0.06983094100831054,-0.0027227158212694723,-0.006634160354786266,0.05709486042108521,2.1648983314596287E-7,9.448051290967615E-7,2.204992619757071]
为什么w会有负数?
结果和对应的特征是属于负相关。
lrModel.intercept
res30: Double = -2.392662746798164
loss:
0.3677335430939877
areaUnderROC,auc:
0.6683024968770018
F(w)>= F(wnew)
F(w)- F(wnew)
a=0.5 c是步长=1
c=a*c=0.5
c=a*c=0.25
c=a*c=0.125
推荐里面做全局打分的。
user 100女 一个小时
线下去看照片,选出20个(召回,候选集) [广告内容]
到现场:top5个都相一遍就能挑出最终一个
LR对这20个人做一个打分——>top5
LR做打分,是全局线上的
用户对商品的打分,对打分的准确度做一个估计(auc)
先找数据开发---->数据挖掘 (先上车,后买票)
我得努力了,只有努力过了才不会有遗憾
加油 生活会慢慢变好的
2020年3月26号是没找到工作,生活特别迷茫跟消极,找不到工作 我怎么养活家里人

浙公网安备 33010602011771号