浅谈保序回归
一,保序回归的定义
数学定义: 给定一个有限的实数集合
Y = y 1 , y 2 , . . . y n Y=y_1,y_2,...y_n Y=y1,y2,...yn 代表观察到的响应,以及 X = x 1 , x 2 , . . . x n X=x_1,x_2,...x_n X=x1,x2,...xn 代表未知的响应值,训练一个模型最小化下列方程:
f ( x ) = ∑ i = 1 n w i ( y i − x i ) 2 f(x)=\sum_{i=1}^n{w_i{(y_i-x_i)}^2} f(x)=i=1∑nwi(yi−xi)2
其中 x 1 ≤ x 2 . . . ≤ x n , w i x_1\le x_2...\le x_n,w_i x1≤x2...≤xn,wi 为权重是正值,其结果称之为保序回归,而且其解是唯一的。
翻译一下:给出一个有向图 边 ( u , v ) (u,v) (u,v) 表示一种偏序关系要求权值 y u ≤ y v y_u \le y_v yu≤yv 可以修改每个点的权值 费用为修改前后贡献的平方差 要求修改后的点满足偏序关系
二,套路做法
整体二分
整体二分时给点分类时是这样一个过程
每个点只能取 m i d , m i d + 1 mid,mid+1 mid,mid+1 要求满足偏序关系 且费用最小
有一个结论是
取
m
i
d
mid
mid 的点的答案取值为
[
l
,
m
i
d
]
[l,mid]
[l,mid] 取
m
i
d
+
1
mid+1
mid+1 的点的取值为
[
m
i
d
+
1
,
r
]
[mid+1,r]
[mid+1,r]
怎么求每个点取 m i d mid mid 还是 m i d + 1 mid+1 mid+1 呢?
最大(小)权闭合子图:
“闭合子图”就是某个点集 V V V ,满足对于任意 u ∈ V u \in V u∈V,对于任意 ( u , v ) ∈ E (u,v)\in E (u,v)∈E 都有 e ∈ V e\in V e∈V。用人话说就是从 V V V中的每个点开始遍历,
能够遍历到的每个点都在 V V V 中。每个点上有个权值 w i w_i wi,要选出一个闭合子图使得点权最大。
一般套路:网络流,建个新图。对于每个点i ,如果 w i > 0 w_i>0 wi>0 就连边 ( S , i , w i ) (S,i,w_i) (S,i,wi) ,如果 w i < 0 w_i<0 wi<0 就连边 ( i , T , − w i ) (i,T,-w_i) (i,T,−wi) 。原图中的每一条边都在新图中对应地连,容量无穷。
答案为 ∑ w i > 0 w i − 最 小 割 \sum_{w_i>0} w_i-最小割 ∑wi>0wi−最小割
理解:如果不考虑限制,则贪心地选所有正权点是最优的。加入限制,对于一个点 u u u ,如果它不选,则所有 v v v ,满足从 v v v 开始遍历可以走到 u u u ,这些 v v v 都不能选。显然所有 u u u 满足这个条件是充分必要条件。
放在图中来看:割掉边 ( u , T ) (u,T) (u,T) ,即选 v v v ,或者割掉边 ( S , v ) (S,v) (S,v) ,即不选 v v v 。 —A1847225889
简单说就是把每个点权值设为 − ( w ( i , m i d + 1 ) − w ( w , m i d ) ) -(w(i,mid+1)-w(w,mid)) −(w(i,mid+1)−w(w,mid))
w ( i , f ) w(i,f) w(i,f) 为 y i y_i yi 变为 f f f 时的代价
然后跑网络流
选了的点就是 m i d + 1 mid+1 mid+1 不选的点是 m i d mid mid
割掉边 ( u , T ) (u,T) (u,T) ,即选 v v v ,或者割掉边 ( S , v ) (S,v) (S,v) ,即不选 v v v
三,拓展
我们上述讨论的是 f ( x ) = ∑ i = 1 n w i ( y i − x i ) 2 f(x)=\sum_{i=1}^n{w_i{(y_i-x_i)}^2} f(x)=∑i=1nwi(yi−xi)2 的问题
其实可以拓展到 f ( x ) = ∑ i = 1 n w i ( y i − x i ) p f(x)=\sum_{i=1}^n{w_i{(y_i-x_i)}^p} f(x)=∑i=1nwi(yi−xi)p 的情况上
做法一摸一样(你会发现我们求解时根本没用到多少次幂
四,证明
- 证明做法中一个结论
取 m i d mid mid 的点的答案取值为 [ l , m i d ] [l,mid] [l,mid] 取 m i d + 1 mid+1 mid+1 的点的取值为 [ m i d + 1 , r ] [mid+1,r] [mid+1,r]
这个我不会证但是论文里面有 大佬们可以取看看 (2018集训队论文高睿泉《浅谈保序回归问题》)
- 时间复杂度 O ( n 2 l o g n ) O(n^2logn) O(n2logn)
整体二分一个 log
然后网络流感性理解 每次平均 O ( n ) O(n) O(n)