机器学习逻辑回归:使用C++语言手工编写程序对a1a数据集进行Logistic分类

这篇博客主要介绍了如何使用C++手工编写程序实现逻辑回归,对UCI的a1a数据集进行分类。实验内容包括数据的读写、逻辑回归算法的原理和实现,以及实验过程中遇到的问题与解决方案。博主通过实验展示了在不同迭代次数和学习速率下,逻辑回归模型在训练集和测试集上的精确率变化。

一、实验目的和要求

1. 实验目的

(1) 熟悉机器学习数据处理过程
(2) 使用一种机器学习算法进行数据分类或回归
2. 实验要求
使用a1a数据集进行分类,使用线性回归和对数几率回归。注意数据集中的标签、稀疏处理。完成以下内容:
(1)完成a1a数据集的读写操作。根据a1a数据集文件,写一个数据加载函数,将数据集加载到内存中,数据采用矩阵形式存储。写一个数据保存函数,将内存中的数据集保存为LIBSVM的数据集格式。
(2)对数据集a1a进行对数几率回归算法进行分类,分别输出训练集和测试集上的准确率。


P.S. a1a数据集,其原型为UCI的Adult Data Set ,其大概意思是根据人的特征来判断你是否每年的工资大于50k,所以这是一个二分分类问题。 a1a数据集对其进行了简化,其一共有123个特征,如下所示为其一行的数据-1 5:1 6:1 17:1 21:1 35:1 40:1 53:1 63:1 71:1 73:1 74:1 76:1 80:1 83:1,其中-1表示未能超过50k(即负类,实际编程可以置为0),接着我们可以初始化一个一行零向量(1,123),5:1表示第5个位置为1,以下类推……这样我们对其数据就有了个大概认识。

参考 http://blog.youkuaiyun.com/Solitarily/article/details/79646530


二、实验仪器和设备

CPU:Inter(R) Core(TM)i5-7300HQ CPU@2.50GHz 2.50GHz
内存:8.00GB
硬盘:128G 机械硬盘 + 昱科(HGST)1TB 7200转32M SATA6Gb/s
显卡:GTX1050
Windows 10 64位,Visual Studio2017,OpenCV 3.4.1

三、实验过程

1. a1a数据集的载入与保存
(1)a1a数据集在文件中的格式为:标签 维度索引:数据值
例如:

(2)a1a数据集在内存中的格式为
cv::Mat (矩阵)
(3)载入数据集的原理与实现
分为以下步骤(以训练集为例):
函数声明:void loadDataSet(cv::Mat &a, cv::Mat &b, string readfileAddress);
1.定义存储矩阵并初始化:

cv::Mat labels = cv::Mat::zeros(1605,1, CV_64F); //标签矩阵 样本数量1605
cv::Mat sample = cv::Mat::zeros(1605, 124, CV_64F);//123种特征 +1列b 

2.读取文件(按行读取),存储标签:

getline(in, buffer);
            int num = atoi(buffer.substr(0, 2).c_str());
            if(num == 1)
                a.at<double>(count, 0) = num; //存储label
            else if(num == -1) 
                a.at<double>(count, 0) = 0; //-1 标签存储为0

3.处理维度索引,并存入样本矩阵:


                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值