#include <math.h>
#include "mex.h"
double mymax(double x, double y)
{
if (x > y)
return x;
else
return y;
}
double absolute(double x)
{
if (x >= -x)
return x;
else
return -x;
}
void permuteInt(int *x, int p, int q)
{
int temp;
temp = x[p];
x[p] = x[q];
x[q] = temp;
}
void permute(double *x, int p, int q)
{
double temp;
temp = x[p];
x[p] = x[q];
x[q] = temp;
}
void permuteRows(double *x, int p, int q,int n)
{
int i;
double temp;
for(i = 0; i < n; i++)
{
temp = x[p+i*n];
x[p+i*n] = x[q+i*n];
x[q+i*n] = temp;
}
}
void permuteCols(double *x, int p, int q,int n)
{
int i;
double temp;
for(i = 0; i < n; i++)
{
temp = x[i+p*n];
x[i+p*n] = x[i+q*n];
x[i+q*n] = temp;
}
}
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
int n,sizL[2],sizD[2],i,j,q,s,
*P;
double mu,gamma,xi,delta,beta,maxVal,theta,
*c, *H, *L, *D, *A;
/* Input */
H = mxGetPr(prhs[0]);
if (nrhs == 1)
{
mu = 1e-12;
}
else
{
mu = mxGetScalar(prhs[1]);
}
/* Compute Sizes */
n = mxGetDimensions(prhs[0])[0];
/* Form Output */
sizL[0] = n;
sizL[1] = n;
plhs[0] = mxCreateNumericArray(2,sizL,mxDOUBLE_CLASS,mxREAL);
L = mxGetPr(plhs[0]);
sizD[0] = n;
sizD[1] = 1;
plhs[1] = mxCreateNumericArray(2,sizD,mxDOUBLE_CLASS,mxREAL);
D = mxGetPr(plhs[1]);
plhs[2] = mxCreateNumericArray(2,sizD,mxINT32_CLASS,mxREAL);
P = (int*)mxGetData(plhs[2]);
/* Initialize */
c = mxCalloc(n*n,sizeof(double));
A = mxCalloc(n*n,sizeof(double));
for (i = 0; i < n; i++)
{
P[i] = i;
for (j = 0;j < n; j++)
{
A[i+n*j] = H[i+n*j];
}
}
gamma = 0;
for (i = 0; i < n; i++)
{
L[i+n*i] = 1;
c[i+n*i] = A[i+n*i];
}
/* Compute modification parameters */
gamma = -1;
xi = -1;
for (i = 0; i < n; i++)
{
gamma = mymax(gamma,absolute(A[i+n*i]));
for (j = 0;j < n; j++)
{
//printf("A(%d,%d) = %f, %f\n",i,j,A[i+n*j],absolute(A[i+n*j]));
if (i != j)
xi = mymax(xi,absolute(A[i+n*j]));
}
}
delta = mu*mymax(gamma+xi,1);
if (n > 1)
{
beta = sqrt(mymax(gamma,mymax(mu,xi/sqrt(n*n-1))));
}
else
{
beta = sqrt(mymax(gamma,mu));
}
for (j = 0; j < n; j++)
{
/* Find q that results in Best Permutation with j */
maxVal = -1;
q = 0;
for(i = j; i < n; i++)
{
if (absolute(c[i+n*i]) > maxVal)
{
maxVal = mymax(maxVal,absolute(c[i+n*i]));
q = i;
}
}
/* Permute D,c,L,A,P */
permute(D,j,q);
permuteInt(P,j,q);
permuteRows(c,j,q,n);
permuteCols(c,j,q,n);
permuteRows(L,j,q,n);
permuteCols(L,j,q,n);
permuteRows(A,j,q,n);
permuteCols(A,j,q,n);
for(s = 0; s <= j-1; s++)
L[j+n*s] = c[j+n*s]/D[s];
for(i = j+1; i < n; i++)
{
c[i+j*n] = A[i+j*n];
for(s = 0; s <= j-1; s++)
{
c[i+j*n] -= L[j+n*s]*c[i+n*s];
}
}
theta = 0;
if (j < n-1)
{
for(i = j+1;i < n; i++)
theta = mymax(theta,absolute(c[i+n*j]));
}
D[j] = mymax(absolute(c[j+n*j]),mymax(delta,theta*theta/(beta*beta)));
if (j < n-1)
{
for(i = j+1; i < n; i++)
{
c[i+n*i] = c[i+n*i] - c[i+n*j]*c[i+n*j]/D[j];
}
}
}
for(i = 0; i < n; i++)
P[i]++;
mxFree(c);
mxFree(A);
}
没有合适的资源?快使用搜索试试~ 我知道了~
Softmax回归模型(matlab代码)
共57个文件
m:35个
c:4个
mexw32:2个
4星 · 超过85%的资源 需积分: 43 202 下载量 34 浏览量
2016-03-30
17:30:15
上传
评论 1
收藏 11.14MB ZIP 举报
温馨提示
softmax回归模型是一种常用的分类器,也是与深度结构模型相结合最多的分类方法。本代码包中的程序对图像构建softmax分类器,并按照图像所属类别进行分类。程序是在matlab平台上实现的,简单易懂。
资源推荐
资源详情
资源评论
收起资源包目录
softmax_classifier.zip (57个子文件)
softmax_exercise
t10k-images.idx3-ubyte 7.48MB
computeNumericalGradient.m 1KB
loadMNISTImages.m 811B
train-images.idx3-ubyte 44.86MB
loadMNISTLabels.m 516B
t10k-labels.idx1-ubyte 10KB
softmaxTrain.m 2KB
train-labels.idx1-ubyte 59KB
softmaxCost.m 2KB
minFunc
lbfgsC.mexmac 9KB
lbfgsUpdate.m 614B
autoHess.m 901B
minFunc_processInputOptions.m 4KB
mcholC.mexw64 12KB
ArmijoBacktrack.m 3KB
conjGrad.m 2KB
example_minFunc_LR.m 2KB
precondDiag.m 42B
lbfgsC.mexw32 7KB
autoHv.m 317B
autoGrad.m 807B
lbfgsC.mexmaci 12KB
lbfgsC.c 2KB
mcholC.mexw32 8KB
precondTriuDiag.m 60B
autoTensor.m 870B
lbfgsC.mexa64 8KB
precondTriu.m 51B
lbfgsC.mexw64 10KB
callOutput.m 385B
WolfeLineSearch.m 11KB
rosenbrock.m 1KB
lbfgs.m 924B
dampedUpdate.m 995B
mcholC.mexmaci64 13KB
minFunc.m 43KB
logistic
mylogsumexp.m 227B
mexutil.c 1KB
LogisticLoss.m 659B
repmatC.dll 8KB
LogisticHv.m 216B
repmatC.mexmac 10KB
LogisticDiagPrecond.m 417B
repmatC.c 4KB
mexutil.h 317B
repmatC.mexglx 20KB
lbfgsC.mexmaci64 9KB
mcholinc.m 564B
lbfgsC.mexglx 8KB
isLegal.m 107B
taylorModel.m 677B
example_minFunc.m 2KB
polyinterp.m 4KB
mchol.m 1KB
mcholC.c 4KB
Mysoftmax_classifier.m 2KB
softmaxPredict.m 936B
共 57 条
- 1
资源评论
- 连天决2018-03-26还不是很会用,不过感谢了。
- 我来学习的哈2016-05-04还不是很会用,不过感谢了。
- Anooyman2017-10-24还没有,没有看
lizi998
- 粉丝: 0
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功