原创 C++ 面向對象程序設計OOP【學習筆記】

1. 概述 OOP核心思想:數據抽象、繼承、動態綁定 C++核心思想:封裝、繼承、多態(與OOP一一對應) 2. 定義基類和派生類 基類通過在成員函數聲明前加上virtual關鍵字使得該函數執行動態綁定,派生類需要對這些基類

原创 C++ lambda表達式【學習筆記】

C++ lambda表達式 lambda表達式組成 [捕獲列表](參數列表)->返回類型{函數體} 參數列表和返回類型可以省略,但捕獲列表和函數體必須包含; 捕獲列表通常爲空,返回類型必須使用尾置返回; 例: auto f =

原创 C++ 順序容器 【學習筆記】

順序容器特點對比: 容器類型 是否可變 訪問速度 插入刪除速度 相對空間開銷 vector數組 √ 快速隨機訪問 尾部插入刪除很快,其他位置慢 小 deque雙端隊列 √ 快速隨機訪問 頭尾插入刪除很快,其他位置

原创 一表看懂準確率、精確率、召回率、AUC

準確率(accuracy)、精確率(precision)、召回率(recall) 混淆矩陣 圖片來源:https://www.zhihu.com/question/39840928 理解TN,FP,FN,TP TN:正確地Tr

原创 C++ 理解右值引用、移動語義和完美轉發【轉載】

[c++11]我理解的右值引用、移動語義和完美轉發

原创 C++數組 strlen()和sizeof()的區別

sizeof()返回的是數組的空間大小,單位字節,包含空字符 由於char類型的大小爲1字節,因此字符數組的空間大小就等於字符數組的長度 char a1[]={'C','+','+'};//無空字符 char a2[]={'C

原创 極大似然估計解決線性迴歸問題(頻率學派)

1 前言 之前一篇文章LR推導講了如何使用極大似然估計推導邏輯迴歸的損失函數:交叉熵 ; 本文講解如何使用極大似然估計推導線性迴歸的損失函數:最小二乘。 本文參考自PRML 2 問題定義 給定數據集{x1,x2,...,xm

原创 字符串數組的打印

普通數組的打印: int vec[]={1,2,3,4,5,6,7,8}; int *ip=vec;//注意,vec是常量指針,不能進行++操作 ip+=5; cout<<sizeof(vec)<<

原创 卡爾曼濾波:高斯過程 + 貝葉斯推斷

前言 PRML中提到,卡爾曼濾波是高斯過程的一種應用,本文便從高斯過程的角度來總結一下卡爾曼濾波; 首先明確卡爾曼濾波包括兩部分:預測和更新。預測就是根據系統上一時刻的狀態最優估計Sk−1S_{k-1}Sk−1​預測當前時刻的狀

原创 高斯迴歸(Gaussian Processes)

本文參考《PRML》,並加入了一些自己的理解,如有錯誤懇請指出。 1 前言 1.1 怎麼理解高斯過程?高斯過程和隨機過程的關係是什麼? 高斯分佈:隨機變量服從高斯分佈,意味着在當前時刻,該隨機變量可能取的值服從高斯分佈,但它

原创 貝葉斯線性迴歸(貝葉斯學派)

1 前言 極大似然線性迴歸中,我們使用線性高斯判別模型,似然函數爲(注意大寫的X,YX,YX,Y表示訓練集): p(Y∣X,θ,β)=∏i=1nN(yi∣θTΦ(xi),β−1)p(Y|X,\theta,\beta)=\prod

原创 如何理解協方差和協方差矩陣

協方差 兩個一維隨機變量X,YX,YX,Y之間的協方差: cov(X,Y)=∑i=1n(Xi−Xˉ)(Yi−Yˉ)n−1cov(X,Y)=\frac{\sum_{i=1}^n(X_i-\bar{X})(Y_i-\bar{Y})

原创 淺談DP、MC、TD方法的區別與聯繫

引言 Dynamic Programming, Monte Carlo, Temporal Difference是強化學習過程中最基礎的三種算法,本文主要總結一下這三種方法的區別與聯繫; 強化學習模型本質上是一個隨機過程,可以用

原创 極大似然估計解決線性迴歸問題

1 前言 線性迴歸問題中,我們使用LSE最小二乘損失函數;而在邏輯迴歸問題中,我們不能使用LSE損失函數,應該使用交叉熵損失函數,而交叉熵損失函數是由極大似然估計推導而來,推導過程見LR推導; 本文講解如何從極大似然估計的

原创 邏輯迴歸LR推導

1 問題定義: 給定數據集{x1,x2,...,xm}\{x_1,x_2, ...,x_m\}{x1​,x2​,...,xm​}和標籤{y1,y2,...,ym}\{y_1,y_2, ...,y_m\}{y1​,y2​,...,