#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <list>
#include <map>
#include <math.h>
#include <stdlib.h>
using namespace std;
int line_num = 0;
int accuracy = 0;
int accuracy_new = 0;
vector <int> w;//权重每次更新
vector <int>w_tmp;
vector <int> train_label;//y
map <int,vector<int> > train_data;//a hundred train_data
vector <int> test_label;//y
map <int,vector<int> > test_data;//a hundred train_data
int TP = 0;//预测+1正确
int FN = 0;//预测-1不正确
int FP = 0;//预测+1不正确
int TN = 0;//预测-1正确
int sign(double x){
return x>0? +1:-1;
}
double check(int l){//计算矩阵相乘 ,返回double类型
double ans = 0;
for(int i = 0; i< train_data[l].size() ;i++) {
ans+=train_data[l][i] * w[i];
}
return ans;
}
double check2(int l){//计算矩阵相乘 ,返回double类型
double ans = 0;
for(int i = 0; i< test_data[l].size() ;i++) {
ans+=test_data[l][i] * w[i];
}
return ans;
}
void training(){
int to_check = 1;//从第一个文本开始检查
int countt = 0;
accuracy = 0;
for(int i = 1;i<train_data.size()+1;i++ ){
if(sign(check(i))==train_label[i])
accuracy++;
}
while(to_check!=line_num+1){
to_check = 1;
if(countt>50) break;
countt++;
while(sign(check(to_check))==train_label[to_check]){
to_check++;
if(to_check>line_num)
break;
}
if(to_check<=line_num){
for(int i = 0; i<w.size();i++){
w_tmp[i] = w[i]+train_label[to_check]*train_data[to_check][i];
}
int accuracy_new = 0;
for(int i = 1;i<train_data.size()+1;i++ ){
if(sign(check(i))==train_label[i])
accuracy_new++;
}
if(accuracy_new>=accuracy){
accuracy = accuracy_new;
for(int i = 0; i<w.size();i++){
w[i] = w[i]+train_label[to_check]*train_data[to_check][i];
}
}
if(countt>1000) break;
}
}
cout<<countt<<endl;
return ;
}
void testing() {
for(int i = 1; i<test_data.size()+1 ;i++){
if(sign(check2(i))==test_label[i]){
if(test_label[i]==1) TP++;
else TN++;
}
else{
if(test_label[i]==1) FN++;
else FP++;
}
}
return ;
}
int main(){
//训练
string buffer;//
ifstream train_in("train_data.txt");
ifstream train_in2("train_labels.txt");
if (!train_in.is_open() && !train_in2.is_open()) {
cout << "Error opening file";
exit(1);
}
line_num = 0;//initialize line_num as 0
train_label.push_back(1);
while (!train_in.eof()) {
getline(train_in,buffer);
if(buffer!=""){//make sure line_num counts valid lines
line_num++;
train_data[line_num].push_back(1);//给每个样本前加常数项1
stringstream t;
t<<buffer;
int tmp;//temporary data
while(t>>tmp){
train_data[line_num].push_back(tmp);
}
int label_tmp;
train_in2>>label_tmp;
train_label.push_back(label_tmp);
}
}
for(int i = 0;i<train_data[line_num].size();i++){
w.push_back(0);
w_tmp.push_back(0);
}
// cout<<line_num<<endl;
train_in.close();
train_in2.close();
training();
//测试
ifstream test_in("test_data.txt");
ifstream test_in2("test_labels.txt");
if (!test_in.is_open() && !test_in2.is_open()) {
cout << "Error opening file";
exit(1);
}
line_num = 0;//initialize line_num as 0
test_label.push_back(1);
while (!test_in.eof()) {
getline(test_in,buffer);
if(buffer!=""){//make sure line_num counts valid lines
line_num++;
test_data[line_num].push_back(1);//给每个样本前加常数项1
stringstream t;
t<<buffer;
int tmp;//temporary data
while(!t.eof()){
t>>tmp;
test_data[line_num].push_back(tmp);
}
int label_tmp;
test_in2>>label_tmp;
test_label.push_back(label_tmp);
}
}
test_in.close();
test_in2.close();
testing();
double Accuracy = (double)(TP+TN)/(double)(TP+FP+TN+FN);
double Recall = (double)(TP)/(double)(TP+FN);
double Precision = (double)(TP)/(double)(TP+FP);
double F1 = (double)(2*Precision*Recall)/(double)(Precision+Recall);
cout<<"Accuracy "<<Accuracy<<endl;
cout<<"Recall "<<Recall<<endl;
cout<<"Precision "<<Precision<<endl;
cout<<"F1 "<<F1<<endl;
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
PLA_pocket.zip_PLA_Pocket_accuracy_pla_pocket pla
共1个文件
cpp:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 153 浏览量
2022-09-23
01:37:56
上传
评论
收藏 1KB ZIP 举报
温馨提示
PLA口袋算法实现 包含Accuracy、recall、precision、F1四大指标的验证
资源推荐
资源详情
资源评论
收起资源包目录
PLA_pocket.zip (1个子文件)
PLA_pocket.cpp 4KB
共 1 条
- 1
资源评论
局外狗
- 粉丝: 66
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功