最终收敛到这个结果,巨爽。

smaple 0: 0.983690,0.004888,0.011422,likelyhood:-0.016445

smaple 1: 0.940236,0.047957,0.011807,likelyhood:-0.061625

smaple 2: 0.818187,0.001651,0.180162,likelyhood:-0.200665

smaple 3: 0.000187,0.999813,0.000000,likelyhood:-0.000187

smaple 4: 0.007913,0.992087,0.000000,likelyhood:-0.007945

smaple 5: 0.001585,0.998415,0.000000,likelyhood:-0.001587

smaple 6: 0.020159,0.000001,0.979840,likelyhood:-0.020366

smaple 7: 0.018230,0.000000,0.981770,likelyhood:-0.018398

smaple 8: 0.025072,0.000000,0.974928,likelyhood:-0.025392

  1. #include "stdio.h"
  2. #include "math.h"
  3. double matrix[9][4]={{1,47,76,24}, //include x0=1
  4. {1,46,77,23},
  5. {1,48,74,22},
  6. {1,34,76,21},
  7. {1,35,75,24},
  8. {1,34,77,25},
  9. {1,55,76,21},
  10. {1,56,74,22},
  11. {1,55,72,22},
  12. };
  13. double result[]={1,
  14. 1,
  15. 1,
  16. 2,
  17. 2,
  18. 2,
  19. 3,
  20. 3,
  21. 3,};
  22. double theta[2][4]={
  23. {0.3,0.3,0.01,0.01},
  24. {0.5,0.5,0.01,0.01}}; // include theta0
  25. double function_g(double x)
  26. {
  27. double ex = pow(2.718281828,x);
  28. return ex/(1+ex);
  29. }
  30. double function_e(double x)
  31. {
  32. return pow(2.718281828,x);
  33. }
  34. int main(void)
  35. {
  36. double likelyhood = 0.0;
  37. for(int j = 0;j<9;++j)
  38. {
  39. double sum = 1.0; // this is very important, because exp(thetak x)=1
  40. for(int l = 0;l<2;++l)
  41. {
  42. double xi = 0.0;
  43. for(int k=0;k<4;++k)
  44. {
  45. xi += matrix[j][k]*theta[l][k];
  46. }
  47. sum += function_e(xi);
  48. }
  49. double xi = 0.0;
  50. for(int k=0;k<4;++k)
  51. {
  52. xi += matrix[j][k]*theta[0][k];
  53. }
  54. double p1 = function_e(xi)/sum;
  55. xi = 0.0;
  56. for(int k=0;k<4;++k)
  57. {
  58. xi += matrix[j][k]*theta[1][k];
  59. }
  60. double p2 = function_e(xi)/sum;
  61. double p3 = 1-p1-p2;
  62. double ltheta = 0.0;
  63. if(result[j]==1)
  64. ltheta = log(p1);
  65. else if(result[j]==2)
  66. ltheta = log(p2);
  67. else if(result[j]==3)
  68. ltheta = log(p3);
  69. else
  70. {}
  71. printf("smaple %d: %f,%f,%f,likelyhood:%f\n",j,p1,p2,p3,ltheta);
  72. }
  73. for(int i =0 ;i<1000;++i)
  74. {
  75. for(int j=0;j<9;++j)
  76. {
  77. double sum = 1.0; // this is very important, because exp(thetak x)=1
  78. for(int l = 0;l<2;++l)
  79. {
  80. double xi = 0.0;
  81. for(int k=0;k<4;++k)
  82. {
  83. xi += matrix[j][k]*theta[l][k];
  84. }
  85. sum += function_e(xi);
  86. }
  87. double xi = 0.0;
  88. for(int k=0;k<4;++k)
  89. {
  90. xi += matrix[j][k]*theta[0][k];
  91. }
  92. double p1 = function_e(xi)/sum;
  93. xi = 0.0;
  94. for(int k=0;k<4;++k)
  95. {
  96. xi += matrix[j][k]*theta[1][k];
  97. }
  98. double p2 = function_e(xi)/sum;
  99. double p3 = 1-p1-p2;
  100. for(int m = 0; m<4; ++m)
  101. {
  102. if(result[j]==1)
  103. {
  104. theta[0][m] = theta[0][m] + 0.001*(1-p1)*matrix[j][m];
  105. }
  106. else
  107. {
  108. theta[0][m] = theta[0][m] + 0.001*(-p1)*matrix[j][m];
  109. }
  110. if(result[j]==2)
  111. {
  112. theta[1][m] = theta[1][m] + 0.001*(1-p2)*matrix[j][m];
  113. }
  114. else
  115. {
  116. theta[1][m] = theta[1][m] + 0.001*(-p2)*matrix[j][m];
  117. }
  118. }
  119. }
  120. double likelyhood = 0.0;
  121. for(int j = 0;j<9;++j)
  122. {
  123. double sum = 1.0; // this is very important, because exp(thetak x)=1
  124. for(int l = 0;l<2;++l)
  125. {
  126. double xi = 0.0;
  127. for(int k=0;k<4;++k)
  128. {
  129. xi += matrix[j][k]*theta[l][k];
  130. }
  131. sum += function_e(xi);
  132. }
  133. double xi = 0.0;
  134. for(int k=0;k<4;++k)
  135. {
  136. xi += matrix[j][k]*theta[0][k];
  137. }
  138. double p1 = function_e(xi)/sum;
  139. xi = 0.0;
  140. for(int k=0;k<4;++k)
  141. {
  142. xi += matrix[j][k]*theta[1][k];
  143. }
  144. double p2 = function_e(xi)/sum;
  145. double p3 = 1-p1-p2;
  146. double ltheta = 0.0;
  147. if(result[j]==1)
  148. ltheta = log(p1);
  149. else if(result[j]==2)
  150. ltheta = log(p2);
  151. else if(result[j]==3)
  152. ltheta = log(p3);
  153. else
  154. {}
  155. printf("smaple %d: %f,%f,%f,likelyhood:%f\n",j,p1,p2,p3,ltheta);
  156. }
  157. }
  158. return 0;
  159. }

SoftMax regression的更多相关文章

  1. Softmax回归(Softmax Regression)

    转载请注明出处:http://www.cnblogs.com/BYRans/ 多分类问题 在一个多分类问题中,因变量y有k个取值,即.例如在邮件分类问题中,我们要把邮件分为垃圾邮件.个人邮件.工作邮件 ...

  2. (六)6.10 Neurons Networks implements of softmax regression

    softmax可以看做只有输入和输出的Neurons Networks,如下图: 其参数数量为k*(n+1) ,但在本实现中没有加入截距项,所以参数为k*n的矩阵. 对损失函数J(θ)的形式有: 算法 ...

  3. Deep Learning 学习随记(三)续 Softmax regression练习

    上一篇讲的Softmax regression,当时时间不够,没把练习做完.这几天学车有点累,又特别想动动手自己写写matlab代码 所以等到了现在,这篇文章就当做上一篇的续吧. 回顾: 上一篇最后给 ...

  4. UFLDL实验报告1: Softmax Regression

    PS:这些是今年4月份,跟斯坦福UFLDL教程时的实验报告,当时就应该好好整理的…留到现在好凌乱了 Softmax Regression实验报告 1.Softmax Regression实验描述 So ...

  5. ufldl学习笔记和编程作业:Softmax Regression(softmax回报)

    ufldl学习笔记与编程作业:Softmax Regression(softmax回归) ufldl出了新教程.感觉比之前的好,从基础讲起.系统清晰,又有编程实践. 在deep learning高质量 ...

  6. 学习笔记TF024:TensorFlow实现Softmax Regression(回归)识别手写数字

    TensorFlow实现Softmax Regression(回归)识别手写数字.MNIST(Mixed National Institute of Standards and Technology ...

  7. TensorFlow实战之Softmax Regression识别手写数字

         关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2018年02月21日 23:10:04所撰写内容(http://blog.c ...

  8. R︱Softmax Regression建模 (MNIST 手写体识别和文档多分类应用)

    本文转载自经管之家论坛, R语言中的Softmax Regression建模 (MNIST 手写体识别和文档多分类应用) R中的softmaxreg包,发自2016-09-09,链接:https:// ...

  9. TensorFlow(2)Softmax Regression

    Softmax Regression Chapter Basics generate random Tensors Three usual activation function in Neural ...

  10. 逻辑回归与神经网络还有Softmax regression的关系与区别

    本文讨论的关键词:Logistic Regression(逻辑回归).Neural Networks(神经网络) 之前在学习LR和NN的时候,一直对它们独立学习思考,就简单当做是机器学习中的两个不同的 ...

随机推荐

  1. 安卓Button-TextView-EditText综合运用

    1.如何使用安卓中的按键Button? 1.先从控件库拖一个按钮button的控件,在XML设置好宽高等参数 对应的就是Button这个图标,直接拖出来即可; 以下是设置这个按钮对应的XML代码: & ...

  2. Servlet规范总结

    Servlet接口 Servlet规范的核心接口即是Servlet接口,它是所有Servlet类必须实现的接口,在Java Servelt API中已经提供了两个抽象类方便开发者实现Servlet类, ...

  3. SpringMVC实现用户登录实例

    今天分享一下SpringMVC的一个登陆小案例 准备工作 创建一个Dynamic Web Project(本人是Eclipse) 添加相关的jar包,构建路径 创建springMVC-servlet. ...

  4. 返回present的根

    //返回四大tab页面 + (void)gobackToTabarController { UINavigationController* selectedTabNavController = (UI ...

  5. Android初级教程反射+AIDL+内容观察者监控黑名单号码代码模板

    对于想要拦截一些莫名的陌生号码,就需要电话拦截功能与删除其电话记录功能.拦截的主要业务逻辑,分别是在一个服务里面进行:1.注册电话监听:2.取消注册电话监听(当然注册于取消是在服务里面建立一个广播接收 ...

  6. 调用MediaScannerConnection 发生内存泄露的解决方法

    调用MediaScannerConnection发起扫描时经常会发生内存泄露,例如: E ActivityThread: Activity FolderListActivity has leaked ...

  7. (一一七)基本文件操作 -SDWebImage清除缓存 -文件夹的大小计算

    在iOS的App沙盒中,Documents和Library/Preferences都会被备份到iCloud,因此只适合放置一些记录文件,例如plist.数据库文件.缓存一般放置到Library/Cac ...

  8. SpriteBuilder实现2D精灵光影明暗反射效果(二)

    使用SpriteBuilder新建一个项目,将默认MainScene.ccb中的内容统统删掉,此时场景应该是一片漆黑. 将官网中的2张图片以及我自己做的2张图片全部拖拽到其文件视图中去: 其中加_n后 ...

  9. Android 有关于* daemon not running.starting it now on port 5037 *ADB

    adb shell时出现以下信息:  * daemon not running. starting it now on port5037 * ADB server didn't ACK  * fail ...

  10. Swift下自定义xib添加到Storyboard

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51657154 ...