【计划执行报告】Day2 04-01 机器学习预备知识|排序算法初探
Day2 04-01 ML预备知识|排序算法初探
这是我:计划执行的第2天
说说今天的问题吧:①早上8:20起的床(比计划晚了1h),8:40开始干的活(比计划推迟了40min),这直接导致后续的机器学习任务未完成;②今天把蓝桥杯竞赛训练的时间误打到了"主动式学习"中,不过没太大影响(毕竟记录时间只是个形式,但长期乱记也不行);由于过了零点,目标完成记录丢失了,这也是需要注意的,即给总结留足时间;③蓝桥杯模拟题回顾的题量过多,40min弄清一道题就好了(毕竟是自己没做出来的)④机器学习课讲的流型学习没跟上,因此大多时间用于逛京东和写评语去了(好在视频有录制)。。。
再说说今天进步的点:①专业课(材料科学基础与新能源材料)听课效率高,并实时做了笔记;②每一个工作时段没有明显的感到疲惫,并且计划留有的裕量弥补了一些不可避免的情况(如工作超时),说明饭后一段时间的休息以及裕量设置是有必要的(毕竟计划有时赶不上变化);
近期计划(03-31-04-12)
1.准备4月10日的机器学习最终报告——《畅想无监督学习》;查找文献与知识补充:《机器学习——算法视角》
2.完成专业课的作业;
3.备战蓝桥杯,为此:①每天40min左右的刷题;②知识补充:《程序员的面试笔记:C/C++、算法、数据结构篇》
今日计划表
实际时间分配
这是我第一次使用atimelogger来记录时间,因此不小心提前点了“报告”功能,使得16:00前的数据都缺失了,此后到22:30的记录如下图。
|
今日学习总结与反思
1.机器学习
1.1《机器学习——算法描述》第2章 预备知识 2.3-2.5
- 知识梳理
- 理解条件概率、联合概率、先验概率、后验概率、最大后验假设、贝叶斯最优分类和朴素贝叶斯分类的概念
- 熟悉均值、方差、协方差、协方差矩阵马氏距离
- 熟悉高斯分布,理解偏差-方差困境发生的原因,掌握并推导平方和误差函数的期望的分解形式 E=噪声^2 + 方差 + 偏差^2:
- 复习指引
- 不用刻意复习,碰到哪个概念不懂就去查书或者其它资料
- 一定要推一推平方和误差函数的期望的展开
1.2 回看机器学习PCA课堂录屏(未看完)的收获
- 理解了超平面的概念:超平面是什么?——理解超平面
- 对PCA降维的个人理解:我觉得它与做笔记的过程类似,听课做笔记的过程其实就是课程中有用信息(知识点)的提取,把带有时间维度的“课程”降维成了无时间维度的“文本”,比如上网课,网课就是音视频,带有“图像”、“声音”与“时间”三个基本维度,记的笔记是只有“文字”这一维度,但实际上它是综合提取了特定时间下的图像与声音,把三个维度的信息浓缩而成,其实也就像是降维,学生通过所做的笔记又能迅速回想起上课的细节,这就类似把“文字”维度还原成了“图像”、“声音”与“时间”维,即“升维”过程,而这种升维后的信息往往要比原信息更为有效。
2.《程序员的面试笔记:C/C++、算法、数据结构篇》
第19章 排序
-
知识梳理
- 熟悉六大排序算法的排序机理:直接插入排序、冒泡排序、选择排序、希尔排序、快速排序、堆排序
- 直接插入排序:O( ) O(1) 无序序列的元素不断插入到有序序列的排序
- 冒泡排序:O( ) O(1) 不多bb
- (简单)选择排序:O( ) O(1) 每趟排序中无需序列中最小/大的元素与无序序列第一个元素交换
- 希尔排序:O( ) O(1) 插排plus–>每一趟排序按一定间隔来比较元素,且间隔逐趟递减(经验表示变为一半),直到间隔为1再排一轮后结束。总体减少了元素的移动
- 快速排序:O( ) O( ) 最坏情况:O( ) 按一定方法选取基准元素,若从小到大排,则把比它小的元素放在其前面,大的放在后面,因而前后有两个子序列,然后再分别对两个子序列重复一样的操作(递归)
- 堆排序:O( ) O(1) a.将原始序列构成一个大顶堆;b.交换堆的第一个元素和堆的最后一个元素; c.将除了最大元素的剩余元素构成的序列转换为一个大顶堆 d.重复步骤b-c 次
- 掌握各种排序算法的时空复杂度以及选择排序算法的三大依据:规模、实现难度、排序稳定性
- 熟悉六大排序算法的排序机理:直接插入排序、冒泡排序、选择排序、希尔排序、快速排序、堆排序
-
复习指引
- 画个表格,列出各个排序算法的时空复杂度(平均时间-最坏情况-空间需求)
- 实现各种排序的操作,完成面试题的编程实现
3.蓝桥杯竞赛训练收获
- 第7题:具有交替特性的题目可用“0-1加和为1”来表示;疑惑:正则表达式
- 对std::cin和std::cout相关语句的理解:为的是解除兼容C采取的让步,提高效率。详情可见:
关于ios::sync_with_stdio(false);和 cin.tie(0)加速c++输入输出流- ios::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- 计时程序写法
4.专业课的总结
4.1《材料科学基础与新能源材料》第六章 燃料电池
4.2 生物学基础与生物质能转化原理和技术 直线拟合
求反应的活化能:
import numpy as np
import matplotlib.pyplot as plt
def mean(data):
sum = 0
for i in range(len(data)):
sum += data[i]
return sum/len(data)
def line_fit(xdata,ydata): # y = kx + b
# 均值
x_mean = mean(xdata)
y_mean = mean(ydata)
xy_mean = mean(xdata * ydata)
xx_mean = mean(xdata * xdata)
k = (xy_mean - x_mean * y_mean) / (xx_mean - x_mean * x_mean)
b = y_mean - k * x_mean
return k, b
if __name__ == "__main__":
xdata = np.array([1.657, 1.595, 1.535, 1.524])
ydata = np.array([6.653, 7.501, 8.321, 8.464])
print(xdata * ydata)
plt.figure(1)
plt.scatter(xdata, ydata)
plt.xlabel('1/T x1000')
plt.ylabel('lnk')
xx = np.linspace(1.5, 1.7, 100)
k, b = line_fit(xdata, ydata)
yy = k * xx + b
plt.plot(xx, yy, c='red')
R = 8.314 #
E = -k * R * 1000
plt.title("y=kx+b"+" k="+str(round(k, 3))+"
E="+str(int(E / 1000))+"kJ/mol")
plt.show()