数据挖掘----回归算法

线性回归

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号是没找到工作,生活特别迷茫跟消极,找不到工作  我怎么养活家里人

posted @ 2020-03-26 22:50  Simon92  阅读(933)  评论(0)    收藏  举报