【計劃執行報告】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()