SoftMax regression
最终收敛到这个结果,巨爽。
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
- #include "stdio.h"
- #include "math.h"
- double matrix[9][4]={{1,47,76,24}, //include x0=1
- {1,46,77,23},
- {1,48,74,22},
- {1,34,76,21},
- {1,35,75,24},
- {1,34,77,25},
- {1,55,76,21},
- {1,56,74,22},
- {1,55,72,22},
- };
- double result[]={1,
- 1,
- 1,
- 2,
- 2,
- 2,
- 3,
- 3,
- 3,};
- double theta[2][4]={
- {0.3,0.3,0.01,0.01},
- {0.5,0.5,0.01,0.01}}; // include theta0
- double function_g(double x)
- {
- double ex = pow(2.718281828,x);
- return ex/(1+ex);
- }
- double function_e(double x)
- {
- return pow(2.718281828,x);
- }
- int main(void)
- {
- double likelyhood = 0.0;
- for(int j = 0;j<9;++j)
- {
- double sum = 1.0; // this is very important, because exp(thetak x)=1
- for(int l = 0;l<2;++l)
- {
- double xi = 0.0;
- for(int k=0;k<4;++k)
- {
- xi += matrix[j][k]*theta[l][k];
- }
- sum += function_e(xi);
- }
- double xi = 0.0;
- for(int k=0;k<4;++k)
- {
- xi += matrix[j][k]*theta[0][k];
- }
- double p1 = function_e(xi)/sum;
- xi = 0.0;
- for(int k=0;k<4;++k)
- {
- xi += matrix[j][k]*theta[1][k];
- }
- double p2 = function_e(xi)/sum;
- double p3 = 1-p1-p2;
- double ltheta = 0.0;
- if(result[j]==1)
- ltheta = log(p1);
- else if(result[j]==2)
- ltheta = log(p2);
- else if(result[j]==3)
- ltheta = log(p3);
- else
- {}
- printf("smaple %d: %f,%f,%f,likelyhood:%f\n",j,p1,p2,p3,ltheta);
- }
- for(int i =0 ;i<1000;++i)
- {
- for(int j=0;j<9;++j)
- {
- double sum = 1.0; // this is very important, because exp(thetak x)=1
- for(int l = 0;l<2;++l)
- {
- double xi = 0.0;
- for(int k=0;k<4;++k)
- {
- xi += matrix[j][k]*theta[l][k];
- }
- sum += function_e(xi);
- }
- double xi = 0.0;
- for(int k=0;k<4;++k)
- {
- xi += matrix[j][k]*theta[0][k];
- }
- double p1 = function_e(xi)/sum;
- xi = 0.0;
- for(int k=0;k<4;++k)
- {
- xi += matrix[j][k]*theta[1][k];
- }
- double p2 = function_e(xi)/sum;
- double p3 = 1-p1-p2;
- for(int m = 0; m<4; ++m)
- {
- if(result[j]==1)
- {
- theta[0][m] = theta[0][m] + 0.001*(1-p1)*matrix[j][m];
- }
- else
- {
- theta[0][m] = theta[0][m] + 0.001*(-p1)*matrix[j][m];
- }
- if(result[j]==2)
- {
- theta[1][m] = theta[1][m] + 0.001*(1-p2)*matrix[j][m];
- }
- else
- {
- theta[1][m] = theta[1][m] + 0.001*(-p2)*matrix[j][m];
- }
- }
- }
- double likelyhood = 0.0;
- for(int j = 0;j<9;++j)
- {
- double sum = 1.0; // this is very important, because exp(thetak x)=1
- for(int l = 0;l<2;++l)
- {
- double xi = 0.0;
- for(int k=0;k<4;++k)
- {
- xi += matrix[j][k]*theta[l][k];
- }
- sum += function_e(xi);
- }
- double xi = 0.0;
- for(int k=0;k<4;++k)
- {
- xi += matrix[j][k]*theta[0][k];
- }
- double p1 = function_e(xi)/sum;
- xi = 0.0;
- for(int k=0;k<4;++k)
- {
- xi += matrix[j][k]*theta[1][k];
- }
- double p2 = function_e(xi)/sum;
- double p3 = 1-p1-p2;
- double ltheta = 0.0;
- if(result[j]==1)
- ltheta = log(p1);
- else if(result[j]==2)
- ltheta = log(p2);
- else if(result[j]==3)
- ltheta = log(p3);
- else
- {}
- printf("smaple %d: %f,%f,%f,likelyhood:%f\n",j,p1,p2,p3,ltheta);
- }
- }
- return 0;
- }
SoftMax regression的更多相关文章
- Softmax回归(Softmax Regression)
转载请注明出处:http://www.cnblogs.com/BYRans/ 多分类问题 在一个多分类问题中,因变量y有k个取值,即.例如在邮件分类问题中,我们要把邮件分为垃圾邮件.个人邮件.工作邮件 ...
- (六)6.10 Neurons Networks implements of softmax regression
softmax可以看做只有输入和输出的Neurons Networks,如下图: 其参数数量为k*(n+1) ,但在本实现中没有加入截距项,所以参数为k*n的矩阵. 对损失函数J(θ)的形式有: 算法 ...
- Deep Learning 学习随记(三)续 Softmax regression练习
上一篇讲的Softmax regression,当时时间不够,没把练习做完.这几天学车有点累,又特别想动动手自己写写matlab代码 所以等到了现在,这篇文章就当做上一篇的续吧. 回顾: 上一篇最后给 ...
- UFLDL实验报告1: Softmax Regression
PS:这些是今年4月份,跟斯坦福UFLDL教程时的实验报告,当时就应该好好整理的…留到现在好凌乱了 Softmax Regression实验报告 1.Softmax Regression实验描述 So ...
- ufldl学习笔记和编程作业:Softmax Regression(softmax回报)
ufldl学习笔记与编程作业:Softmax Regression(softmax回归) ufldl出了新教程.感觉比之前的好,从基础讲起.系统清晰,又有编程实践. 在deep learning高质量 ...
- 学习笔记TF024:TensorFlow实现Softmax Regression(回归)识别手写数字
TensorFlow实现Softmax Regression(回归)识别手写数字.MNIST(Mixed National Institute of Standards and Technology ...
- TensorFlow实战之Softmax Regression识别手写数字
关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2018年02月21日 23:10:04所撰写内容(http://blog.c ...
- R︱Softmax Regression建模 (MNIST 手写体识别和文档多分类应用)
本文转载自经管之家论坛, R语言中的Softmax Regression建模 (MNIST 手写体识别和文档多分类应用) R中的softmaxreg包,发自2016-09-09,链接:https:// ...
- TensorFlow(2)Softmax Regression
Softmax Regression Chapter Basics generate random Tensors Three usual activation function in Neural ...
- 逻辑回归与神经网络还有Softmax regression的关系与区别
本文讨论的关键词:Logistic Regression(逻辑回归).Neural Networks(神经网络) 之前在学习LR和NN的时候,一直对它们独立学习思考,就简单当做是机器学习中的两个不同的 ...
随机推荐
- 21 PagerTabStrip-PagerTitleStrip-viewPager
PagerTabStrip:可以点击跳转到对应viewPager界面 PagerTitleStrip:不可点击 在eclipse开发时如果目标版本为API23那么会有不显示的问题 解决:更换v4包 解 ...
- VIM编辑器操作命令积累
开始学习VIM编辑器了,计划着每周学习几个新命令,记录在本篇博客中. 1.第一次接触 vi demo.txt 进入Normal模式查看文本 i 进入Insert模式插入内容,编辑文本 nG n代表行号 ...
- C/C++的mem函数和strcpy函数的区别和应用
mem系列函数是面试的时候常考的知识点,我们需要熟练掌握这三个函数的原理和代码实现,要能准确无误的写出代码. memcpy.memset和memset三个函数在使用过程中,均需包含以下头文件: //在 ...
- iOS下JS与OC互相调用(二)--WKWebView 拦截URL
在上篇文章中讲述了使用UIWebView拦截URL的方式来处理JS与OC交互. 由于UIWebView比较耗内存,性能上不太好,而苹果在iOS 8中推出了WKWebView. 同样的用WKWebVie ...
- 【Unity Shaders】ShadowGun系列之二——雾和体积光
写在前面 体积光,这个名称是God Rays的中文翻译,感觉不是很形象.God Rays其实是Crepuscular rays在图形学中的说法,而Crepuscular rays的意思是云隙光.曙光. ...
- Linux内存映射--mmap函数
Linux提供了内存映射函数mmap, 它把文件内容映射到一段内存上(准确说是虚拟内存上), 通过对这段内存的读取和修改, 实现对文件的读取和修改, 先来看一下mmap的函数声明: 头文件: < ...
- [openwrt] uci 的shell和lua接口
uci是openwrt上配置操作的接口,不管是自动化的shell脚本,还是使用luci来二次开发配置界面,都会用到这部分知识. uci提供了lua, shell, c接口,这里主要用到了前两种 she ...
- (一〇三)静态库(.a)的调试
上节介绍的方法,只能创建静态库而不能调试,因为直接创建静态库工程并非可执行文件. 本文介绍的方法创建的静态库断点能够在调试时起作用. 为了能够调试静态库,应该在一个可执行工程(例如Single Vie ...
- Java数据类型及类型转换
http://blog.csdn.net/pipisorry/article/details/51290064 java浮点数保留n位小数 import java.text.DecimalFormat ...
- Android的ViewAnimator及其子类ViewSwitcher-android学习之旅(三十三)
ViewAnimator继承了FrameLayout,多个组件重合在一起,可以加入多个组件,然后切换的时候会有动画. ViewAnimator及其子类的继承关系 ViewAnimator常用属性 Vi ...