matlab实现线性回归成绩预测

目的

1. 熟悉matlab基本语法。

2. 使用matlab进行绘图。

3. 复习线性回归于梯度下降。

数据集

与之前的文章,朴素贝叶斯实现成绩等级分类相同,也是某市一模考试成绩(只保留了语文英语数学和总分)

假设函数

等号的左侧代表预测的成绩,左侧(θ0,θ1,θ2,θ3)代表参数,考虑到成绩的实际情况,可以将θ0定义为0,因此要求的参数列表为(θ1,θ2,θ3)。x1,x2,x3分别代表语文成绩,英语成绩和数学成绩。

损失函数

使用梯度下降算法进行迭代

matlab代码

gradient_descent.m

[num,grades_matrix,row] = xlsread('d:/mlGrades/1.xls',1,'A2:D4000');
grades_matrix = str2double(grades_matrix);
parameters = [0,0,0];
step = 0.0000003;
points = [];
for i = 1:1500
    grades_total = grades_matrix(i,:);
    chinese = grades_total(1);
    english = grades_total(2);
    math = grades_total(3);
    total = grades_total(4);
    grades = [chinese english math];
    parameters = parameters - step*(parameters*grades'-total).*grades;
    total_predict = parameters*grades';
    points(end+1)=total - total_predict;
end
plot(points)

这里面的代码简单解释一下,xlsread的返回有三个值,num代表excel文件中的数字矩阵,grades_matrix代表excel中的文字矩阵,row代表当前行。

这里面出现的问题是无论我怎么设置,xlsread这个函数都会把表中的数字识别为字符串,因此需要str2double把字符串矩阵转化为向量矩阵。

在matlab中,*代表矩阵正常的相乘,.*代表矩阵元素与元素直接相乘,grades'代表grades矩阵的转置。

plot函数用于绘图。

结果

可以看到经过大约五百次左右的迭代后,实际值与预测值的差值在0左右波动,达到了最终的目的。

结论

最后得到的三个参数的值分别为1.5460(语文),1.5583(英语),1.8500(数学)。

这说明了什么呢?对于理科生来说,数学当然是最最最最重要的啦٩(๑>◡<๑)۶ 

代码和数据集稍后整理发布到github上去。

逻辑回归是一种用于解决分类问题的机器学习算法。它通过将输入特征与相应的概率进行映射,从而预测离散的输出类别。这种算法在各个领域都有广泛的应用,例如信用评分、医学诊断、垃圾邮件过滤等。 举个例子来讲解逻辑回归。假设你想预测一个学生是否能被大学录取,你收集了一些数据,包括考试成绩和申请材料评估等级。你的目标是根据这些特征预测学生是否会被录取,输出为0表示不被录取,输出为1表示被录取。 在逻辑回归中,我们使用sigmoid函数将线性模型的输出映射到[0, 1]的概率范围内。该函数的定义如下: h(x) = 1 / (1 + exp(-z)) 其中,h(x)表示预测的概率,z是线性模型的输出,定义为: z = w1 * x1 + w2 * x2 + ... + wn * xn + b 其中,w1, w2, ..., wn是特征权重,x1, x2, ..., xn是输入特征,b是偏置项。 在训练逻辑回归模型时,我们使用最大似然估计来估计模型参数。常用的方法是使用梯度下降算法来最小化损失函数。 下面是一个使用Matlab实现逻辑回归的示例代码: ```matlab % 准备训练数据 X = [x1, x2, ..., xn]; % 输入特征矩阵 y = [y1, y2, ..., yn]; % 输出类别向量 % 初始化模型参数 w = zeros(size(X, 2), 1); % 特征权重向量 b = 0; % 偏置项 % 定义sigmoid函数 sigmoid = @(z) 1 ./ (1 + exp(-z)); % 定义损失函数 loss = @(h, y) -y .* log(h) - (1 - y) .* log(1 - h); % 设置学习率和迭代次数 learning_rate = 0.01; num_iterations = 100; % 训练模型 for i = 1:num_iterations % 计算线性模型输出 z = X * w + b; % 计算预测概率 h = sigmoid(z); % 计算损失 cost = sum(loss(h, y)) / length(y); % 更新参数 dw = (X' * (h - y)) / length(y); db = sum(h - y) / length(y); w = w - learning_rate * dw; b = b - learning_rate * db; end % 预测新样本 new_x = [new_x1, new_x2, ..., new_xn]; % 新样本特征 z = new_x * w + b; % 计算线性模型输出 h = sigmoid(z); % 计算预测概率 % 输出预测结果 if h >= 0.5 fprintf('被录取\n'); else fprintf('不被录取\n'); end ``` 这是一个简单的逻辑回归实现示例,你可以根据自己的数据和需求进行相应的修改和扩展。希望对你有帮助!
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值