前提:本文中使用的算法是在《【线性回归】多元线性回归函数在Octave中的实现(二)》中进行描述。
命题:
根据生产环境的中的用户功能使用情况,来推断接下来的用户使用量。
使用数据如下:
x =
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
y =
6144
3372
21119
15909
15049
12045
10106
2890
3069
11787
9221
7300
5785
3372
1613
1396
1968
说明:
X表号天数(1,代表2018-12-01号;以后类似)
输出(Y):使用量,表示当天的使用量
以上就是实际如果,需要对之进行模拟,求解01-20,01-21号类似的预计用户使用情况。
思路:
1、首先直接的显示数据,以分析大概需要使用什么样的模型进行回归。Octave中数据显示如下:
根据以上图形可以分析出以下两点:
1、看出应该大概是一个正弦函数的样子。那在进行模型设计的时候,需要考虑sin(x)的变量。
2、从上图中大概可以看出,有几个点比较异常(点1、点2,点3,点8,点9),其中点1、点2;点8、点9异常偏低。针对这四个点分析,发现原来这四个点都是在周六周天。也就是说如果我们的模型需要尽量准确那我们需要增加一个特征(是否周未)。
那到这里,我们的模型大概也就应该是:y=theta0+theta1x1+theta2sin(x1)+theta3*sin(x3)。
对止我们构建X的矩阵,如下所示:
1.00000 1.00000 0.84147 0.00000
1.00000 2.00000 0.90930 0.00000
1.00000 3.00000 0.14112 1.00000
1.00000 4.00000 -0.75680 1.00000
1.00000 5.00000 -0.95892 1.00000
1.00000 6.00000 -0.27942 1.00000
1.00000 7.00000 0.65699 1.00000
1.00000 8.00000 0.98936 0.00000
1.00000 9.00000 0.41212 0.00000
1.00000 10.00000 -0.54402 1.00000
1.00000 11.00000 -0.99999 1.00000
1.00000 12.00000 -0.53657 1.00000
1.00000 13.00000 0.42017 1.00000
1.00000 14.00000 0.99061 1.00000
1.00000 15.00000 0.65029 0.00000
1.00000 16.00000 -0.28790 0.00000
1.00000 17.00000 -0.96140 1.00000
将以上数据代入我们例(二)中的函数进行求解:
x=ones(size(l1.x)(1),4);
x(:,2)=l1.x;
x(:,3)=sin(x(:,2));
x([1,2,8,9,15,16],4)=0;
y=li.y;
theta=ones(4,1);
[Theta,bResult,ThSL]=RepeatGetMini(0.003,0.001,8000,x,y,theta)
查看训练的集是否正常拟合(可能不太看得清楚,在100多次的时候就已经看向0拟合,但是由于我设置的两次误差较小,所以拟合次数较多):
最终我们得到结果如下:Theta =
我们再将实际的函数和用来预测的点
画出来看一下:
最后,我们可以使用拟合的参数对未来的使用量进行预测:
结果如下 :
所以以上模型更适合在模拟在一个整月内的数据使用情况,然后以后再根据具体的天数进行拟合。对这种前半月、后半月的情况,很明显是不太适合的。
接下来的思考是:
1、从训练集上考虑,多个月的数据进行训练是否更可以得到一个比较可靠的模型?
以上内容如果有不正确或者更好的思路(如果解决梯度下降),也请大家一起过来拍砖。