山东大学计算机学院机器学习实验二

山东大学计算机学院机器学习实验二(Python Version)

实验目的:
本实验的目的是使用牛顿法针对二元分类问题实现逻辑回归。 目标是建立一个模型,可以根据学生两次考试的成绩来估计大学录取机会。 该实验包括绘制数据、应用牛顿法最小化目标函数以及分析结果。
实验步骤:
数据:实验使用的数据集代表 40 名被大学录取的学生和 40 名未录取的学生。 每个训练
请添加图片描述
示例都包含学生在两次标准化考试中的分数以及指示录取或未录取的标签。
绘制数据:在应用牛顿法之前,使用不同的符号绘制数据来表示两个类别(录取和未录取)。
请添加图片描述
绘制出的图像如图所示:
请添加图片描述

**逻辑回归:**逻辑回归的假设函数定义为 hθ(x) = g(θTx),其中 g 是 sigmoid 函数。
定义似然函数J(θ)和对数似然函数L(θ)以方便计算。 目标是最小化负对数似然函数
L(θ)。
损失函数和梯度更新函数的定义如下:
请添加图片描述

梯度下降法:最小化目标函数的一种方法是梯度下降。 该算法迭代更新 θ,直到连续迭代中目标函数值之间的差异小于阈值 ϵ。 计算达到收敛所需的迭代次数、收敛后的θ值以及迭代中L(θ)的减少量。
请添加图片描述

梯度下降法决策边界:收敛后,θ 的值用于查找分类问题中的决策边界。 决策边界定义
为 P(y=1|x;θ) = g(θTx) = 0.5 的线,对应于 θTx = 0。绘制决策边界。
请添加图片描述
梯度下降法概率计算:使用 θ 值计算两次考试中具有特定分数的学生不被录取的概率。
请添加图片描述
Final概率:0.6538676322127192
牛顿法:求导数: 计算损失函数对参数的一阶导数(梯度)和二阶导数(Hessian矩阵)
请添加图片描述
请添加图片描述
请添加图片描述
Newton’s method概率计算:使用 θ 值计算两次考试中具有特定分数的学生不被录取的概率。
请添加图片描述
Final 概率:0.6680218036811543
结论分析与体会:
实验的目的很清晰,就是用牛顿法解决一个二元分类问题,具体来说,就是通过学生两次考试的成绩来预测他们被大学录取的机会。
首先,我在实验报告中详细描述了实验目的,然后进入了实验步骤。我用不同的符号绘制数据,以区分录取和未录取的学生。逻辑回归的部分,我定义了假设函数、似然函数和对数似然函数,还介绍了梯度下降法作为最小化目标函数的一种方法。
我很自豪我的图形展示,特别是损失函数随迭代次数的变化和决策边界的绘制。这些图形直观地展示了算法的收敛过程和最终结果。
在牛顿法的部分,我展示了损失函数一阶导数和二阶导数的计算,以及相应的决策边界和概率计算。这个部分对我来说是个挑战,但我觉得我理解得还不错。
最后,我的结论部分总结了两种方法的最终概率,并对整个实验进行了分析。如果我能再多讨论一下两种方法的优劣势以及它们在实际问题中的应用,可能会更好。
总的来说,这是一个充实而有趣的实验,我觉得我对机器学习和数学方法有了更深的理解。
希望我的实验报告能为我的学习带来一些收获,也希望在未来的学习中能够继续进步!

# numpy实现
import numpy as np
from tqdm import tqdm
import matplotlib.pyplot as plt

# 指定.dat文件的路径
file_path1 = 'data2/ex2x.dat'

# 使用numpy的loadtxt函数读取数据
x = np.loadtxt(file_path1)
x = np.c_[np.ones(x.shape[0]), x]
x_ = x
# 计算均值和标准差
mean_x = np.mean(x, axis=0)
std_x = np.std(x, axis=0)
# 标准化数据
x[:, 1:] = (x[:, 1:] - mean_x[1:]) / std_x[1:]

# 指定.dat文件的路径
file_path = 'data2/ex2y.dat'

# 使用numpy的loadtxt函数读取数据
y = np.loadtxt(file_path)

# Assuming y is a NumPy array and x is a 2D NumPy array
pos = np.where(y == 1)[0]
neg = np.where(y == 0)[0]

# Assuming features are in the 2nd and 3rd columns of x
plt.plot(x[pos, 1], x[pos, 2], 'o', markerfacecolor='none', markeredgecolor='blue', markersize=4, label='Positive')
plt.plot
### 山东大学计算机学院机器学习期末考试复习指南 #### 一、考试概述 山东大学软件学院的《机器学习》课程期末考试主要考察学生对基础知识的理解和应用能力。根据往年的经验总结,考试内容涵盖了理论分析、算法实现及其优化等方面的知识点[^1]。 #### 、考试形式与评分标准 - **考试时间**: 如2023年春季学期安排在2月18日,持续时间为两小时。 - **考试形式**: 近期调整为闭卷模式,增加了记忆性知识点的重要性。 - **成绩构成**: 总评由实验部分(占比60%)加笔试分数(占比40%)共同决定。值得注意的是,实验报告需独立完成,严禁抄袭行为以免影响最终得分[^3]。 #### 三、重点复习方向 ##### 名词解释 准备过程中应着重理解核心概念定义,比如监督学习(Supervised Learning),无监督学习(Unsupervised Learning)等术语的具体含义及应用场景[^4]。 ##### 基础算法原理掌握 对于常见分类器如K近邻(KNN), 支持向量机(SVM), 随机森林(Random Forests)等工作机制要有清晰认识,并能阐述其优势劣势对比情况[^2]。 ##### 实际操作技能提升 通过练习构建简单的预测模型来加深印象,例如基于ID3算法生成决策树结构实例演示如何选取最佳分割特征等问题解答思路。 ```python import math def calculate_entropy(probabilities): entropy = sum([-p * math.log(p, 2) for p in probabilities if p != 0]) return entropy # Example usage of calculating information gain between two attributes 'Outlook' and 'Humidity' prob_outlook_sunny = 0.5; prob_humidity_high = 0.7; entropy_before_splitting = calculate_entropy([prob_outlook_sunny, (1-prob_outlook_sunny)]) expected_value_after_using_outlook = ... # Fill with actual calculation based on dataset distribution. information_gain_for_outlook = entropy_before_splitting - expected_value_after_using_outlook print(f"Information Gain using Outlook as splitting criterion: {information_gain_for_outlook}") ``` 上述代码片段展示了利用熵的概念计算某个特定属性的信息增益的方法之一,在实际题目求解时可根据给定数据集替换相应参数值完成具体运算过程。 #### 四、其他注意事项 除了扎实的基础知识积累外,还应当关注最新科研动态和技术进展趋势,尝试阅读相关领域高质量论文文献拓宽视野范围;另外积极参与课堂内外实践活动锻炼动手解决问题的能力也是十分必要的环节。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咕噜咕噜咕噜128

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值