用高斯核绘制逻辑回归的决策曲线

时间:2014-09-20 09:03:42

标签: matlab machine-learning octave

我尝试使用具有多项式特征的逻辑回归,幸运的是它对我来说工作得很好,而且我能够绘制决策曲线。我已经将map_feature函数用于多项式特征。 (我提到了安德鲁教授关于正则化的逻辑回归的说明):http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=MachineLearning&doc=exercises/ex5/ex5.html

现在我试图使用高斯内核而不是采用多项式特征来实现相同的功能。幸运的是,我的成本函数(j_theta)工作正常并且在每次迭代后减少,我得到了我的最终theta值。 我现在面临的问题是如何在这里绘制决策边界

I am using Octave to develop the algorithms and plot the graphs..

以下是我的数据集大小的详细信息

原始数据集:

Data Set (x):  [20*3] where the first column is the intercept or the bias column

1.00  2.0000   1.0000
1.00  3.0000   1.0000
1.00  4.0000   1.0000
1.00  5.0000   2.0000
1.00  5.0000   3.0000
 .
 .
 .

实施Gaussian Kernal

后具有新功能的数据集
Data set (f) : [20*21] the first column is the intercept column with all values as 1

1.0000e+000  1.0000e+000  6.0653e-001  1.3534e-001  6.7379e-003 . . . . . . . . 
1.0000e+000  6.0653e-001  1.0000e+000  6.0653e-001  8.2085e-002 . . . . . . . .
1.0000e+000  1.3534e-001  6.0653e-001  1.0000e+000  3.6788e-001
1.0000e+000  6.7379e-003  8.2085e-002  3.6788e-001  1.0000e+000
.               .
.               . 
.               .
.               .
.               .

在我的新特征数据集(f)上应用渐变下降后得到的成本函数图是:

enter image description here

因此我得到了新的theta值:

theta: [21*1]
 3.8874e+000
 1.1747e-001
 3.5931e-002
-8.5937e-005
-1.2666e-001
-1.0584e-001
 .
 .
 .

我现在面临的问题是如何在具有新特征数据集和theta值的原始数据集上构建决策曲线。我不知道如何继续。

如果我得到一些线索,教程或链接可以帮助我解决问题,我会很高兴。

感谢您的帮助。感谢

1 个答案:

答案 0 :(得分:1)

引用的Andrew note实际上包含了一个如何绘制决策边界的非常好的例子。另请参阅this stackoverflow帖子。要遵循的基本步骤如下:

  1. 根据输入数据的范围或特征向量X选择分辨率。
  2. 创建由分辨率中的每个点制作的网格。
  3. 使用您学习的逻辑回归模型访问网格中的每个点,预测得分。
  4. 将分数用作Z变量(等高线图上的高度),绘制轮廓曲线。
  5. 在下面的示例代码中,我们假设一个2d特征空间,范围从-1到200.我们选择1.5的步长,然后对于网格中的每个点,我们调用模型predictor - map_feature(u,v) x theta获得积分。最后,通过在matlab中调用contour函数绘制该图。

      

    在这里绘制决策边界将比绘制决策边界更棘手   线性回归中的最佳拟合曲线。你需要绘制   $ \ theta ^ T x = 0 $线条隐含,通过绘制轮廓。这可以   通过在表示网格的点网格上评估$ \ theta ^ Tx $来完成   原始$ u $和$ v $输入,然后绘制线在哪里   $ \ theta ^ Tx $评估为零。   Matlab / Octave的绘图实现如下。

    % Define the ranges of the grid
    u = linspace(-1, 1.5, 200);
    v = linspace(-1, 1.5, 200);
    
    % Initialize space for the values to be plotted
    z = zeros(length(u), length(v));
    
    % Evaluate z = theta*x over the grid
    for i = 1:length(u)
        for j = 1:length(v)
            % Notice the order of j, i here!
            z(j,i) = map_feature(u(i), v(j))*theta;
        end
    end
    
    % Because of the way that contour plotting works
    % in Matlab, we need to transpose z, or
    % else the axis orientation will be flipped!
    z = z'
    % Plot z = 0 by specifying the range [0, 0]
    contour(u,v,z, [0, 0], 'LineWidth', 2)
    

    enter image description here