logistic回归

1 logictic回归

      该方法是一种监督学习算法,为非线性回归模型,是研究分类观察结果(y)与一些影响因素(x)之间关系的一种多变量分析方法,在这里的y属于【0,1】。

      训练过程:

        此过程就是求回归方程中的几个参数,theta1,theta2,theta3,这个是根据公式 y = x1*theta1 + x2*theta2+x3*theta3, 然后根据 http://hi.baidu.com/hehehehello/item/40025c33d7d9b7b9633aff87 这个基础理论知识,可以求得这三个参数,这里我主要谈一下自己代码实现所遇到的问题,一个就是关于theta迭代步长的选取,我这里选的是0.01,迭代10000次,求得三个参数,初始化theta分别选取为1.其实这里最主要的是想说为什么叫logistic回归,与线性回归的的一点区别,这里面主要用到了函数归一化,也就是对模拟函数 x1*theta1 + x2*theta2+x3*theta3用指数函数进行归一。也就是程序里面的g函数。

   识别过程:

      对于已经训练好的三个参数theta1,theta2,theta3,我们把一个数据代入计算出属于为某一类的概率,也就是先计算   y = x1*theta1 + x2*theta2+x3*theta3 ,然后利用g函数对y值进行归一,这就为该数据属于哪一类的概率。


这是写的一个简单demo: 供大家参考:

logistic回归



梯度下降算法
#define N 6
#define M 3
//g函数 也是归一函数
void function_g( int z)
{
   float ez = pow(2.4167852,z);
   return ez/(1+ez);        
}
//梯度下降算法
void Gradient()
{

      
}
//代价函数
double function_Cost()
{
  double sum;
  for(int i = 0; i < N;i++)
  {
    sum += result[i]*log(function_g(function_regection())) + (1- result[i])*log(1 - function_g(function_regection())));  
  }
  
  sum = -sum/N;
  return sum;
}
//生成的线性回归函数
void fuction_regecion()
{
   double  xi = 0; 
   xi + = theta[0]*matrix[i][0] + theta[1]*matrix[i][1] + theta[2]*matrix[i][2]);       
   return xi;
}
//计算迭代步数的和
void sum_error(int j)
{
  double  sum;
  for(int i = 0 ; i < N ;i++)
    {
       sum + = (fuction_g(theta[0]*matrix[i][0] + theta[1]*matrix[i][1] + theta[2]*matrix[i][2]) - result[i])*matric[i][j];
    }
}

void logisticfunction()
{
  double matrix[N][M] ={};
  double result[N] ={1,1,1,1,1,1};
  double theta[M] = {1,1,1};
  float step = 1.0;
  int i =0;
  //让迭代次数趋于1000次
  while(i< 1000)
     {   
        for(int j =0; j < M ;j++)
       {
          theta[j] = theta[j] - step*sum_error(j);     
       }       
       i++;
       
       //计算cost函数
       double costvalue = function_Cost();
          
     }
 
}


           

你可能感兴趣的:(logistic回归)