c++實現logistic迴歸代碼

測試題目:

代碼說明:

1.在main中我用了一個輸入文件來表示輸入,測試時應去除

2.以下函數分別是計算預測值,計算costfunction,羅輯迴歸的執行

3.具體類似於線性迴歸,可參考線性迴歸之梯度下降

代碼如下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<vector>
#include<iostream>
using namespace std;
double hypothesis(vector<double> &feature,vector<double>&w){
    double sum=0.0;
    for(int i=0;i<feature.size();i++){
     sum+=w[i]*feature[i];
    }
    return 1/(1+exp(-sum));
}
double cost_fuction(vector<vector<double> > &feature_sample,vector<double> &w,vector<double>&lable){
    double sum=0.0;
    for(int i=0;i<lable.size();i++){
        sum+=-lable[i]*log(hypothesis(feature_sample[i],w))-(1-lable[i])*log(1-hypothesis(feature_sample[i],w));
    }
    return sum/lable.size();
}
void logic_regression(vector<vector<double> >&feature_sample,vector<double> &lable,vector<double> &w,double a){
    vector<double> delta_w;
    for(int j=0;j<feature_sample[0].size();j++){
        double sum=0.0;
        for(int i=0;i<lable.size();i++){
            sum+=(hypothesis(feature_sample[i],w)-lable[i])*feature_sample[i][j];
        }
        delta_w.push_back(sum/lable.size()*a);
    }
    for(int i=0;i<w.size();i++){
        w[i]-=delta_w[i];
    }
    cout<<cost_fuction(feature_sample,w,lable)<<endl;
}
int main(){
    freopen("in.txt","r",stdin);
    int feature_num,training_num,t;
    double a;
    cin>>feature_num>>training_num>>a>>t;
    vector<vector<double> >feature_sample;
    vector<double> tem;
    vector<double> lable;
    vector<double> w;
    double m;
    for(int i=0;i<training_num;i++){
        tem.clear();
        tem.push_back(1);
        for(int j=0;j<feature_num;j++){
            cin>>m;
            tem.push_back(m);
        }
        cin>>m;
        lable.push_back(m);
        feature_sample.push_back(tem);
    }
    for(int i=0;i<=feature_num;i++) w.push_back(0);
    while(t--) logic_regression(feature_sample,lable,w,a);
    for(int i=0;i<=feature_num;i++) cout<<w[i]<<" ";
    return 0;
}

運行結果解圖


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章