原创 劍指Offer[31]:棧的壓入、彈出序列

題目 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否爲該棧的彈出順序。假設壓入棧的所有數字均不相等。 LeetCode中也有相同的題目:驗證棧序列 解決思路   直觀的想法就是構建一個棧,將第一個序列按順序

原创 [機器學習]K-近鄰算法

算法概述   自我感覺K-近鄰(k-NearestNeighbor)算法是最簡單最易理解的分類算法了。怎麼個簡單法呢?簡單到沒有一個訓練分類器的過程,僅僅根據需要分類的樣本到已知類別的樣本之間的距離來進行分類。   簡單來講,如果

原创 python多進程並行的簡單實現

  這兩天在跑一個文件處理程序的時候想着利用多核並行處理實現節省時間,然後例程裏用了threading.Thread來實現,結果依舊很慢,查看了一下cpu使用情況根本就是在單核上跑啊。查了一下才發現python中多線程存在PIL鎖

原创 [深度學習-2.4] Dropout正則化

除了L2正則化之外,還有一個很常用的正則化技巧就是Dropout(隨機失活)。它的主要思想就是隨機丟棄網絡每一層的一些神經元。 原理和實現   首先從原理上來理解一下什麼是Dropout正則化。如下圖所示(圖片來源於吳恩達老師深度

原创 [機器學習] Adaboost原理及實現

Boost   Adaboost(adaptive boosting)是一種集成學習算法,基於boosting的框架,因此首先簡單說一下boosting算法。boosting算法主要的目的是將“弱分類器”提升爲“強分類器”。其工作

原创 [機器學習] 奇異譜分析(SSA)原理及Python實現

最近做時間序列分析的時候需要用到奇異譜分析,發現網上可以查到的資料很有限,看paper的時候發現大部分也說得有些簡略,所以這裏看完之後總結一下。   奇異譜分析(Singular Spectrum Analysis, SSA)是一

原创 [深度學習-1.4] 構建深層神經網絡並實現MNIST手寫數字識別

許多情況下淺層神經網絡(包括之前的邏輯迴歸和單隱層神經網絡)效果可能並不理想,這就是爲什麼要用深層神經網絡的原因。   前面Logistic迴歸和單隱層神經網絡都是解決二分類問題,學習完深層神經網絡之後我想嘗試一下解決複雜一點的問

原创 [深度學習-1.1] 單神經元和Logistic迴歸解決二分類問題

開始斷斷續續看吳恩達老師的深度學習課程一段時間了,學習完了第一部分,不管是看視頻還是做課後練習都讓我有瘋狂吹一下這個課程的衝動,是真的講的很好啊!! 看完也想着自己慢慢總結一下加深理解,嗯,希望我不是下一個從入門到放棄的案例 單神

原创 [深度學習-2.3] 正則化減少過擬合

在開發一個分類器的時候如果出現了過擬合問題(高方差),其中一個有效的方法是增加更多的訓練數據,但很多情況下無法獲取到更多的數據,這時候就應該考慮另一個很有效的方法——正則化。 正則化的原理   以Logistic迴歸分類器爲例。使

原创 [深度學習-1.2] 神經網絡中常用的激活函數

激活函數的作用   對於一個神經網絡中的神經元(節點),需要根據輸入計算這個神經元的輸出(節點激活值)。以下圖表示的這個神經元爲例,計算它的輸出包括兩步 對輸入值的線性加權,z=∑i=13wixi+bz=\sum_{i=1}^{

原创 [深度學習-2.1] 訓練集、驗證集和測試集

爲什麼要設置訓練集、驗證集和測試集   在訓練一個神經網路的時候,通常我們最初並不知道怎麼樣的超參數配置才能讓我得到一個高性能的網絡,這些超參數包括神經網絡的層數,每一層的神經元數量,每層的激活函數選擇以及學習率等。所以一般的做法

原创 [深度學習-1.3] 建立一個單隱層的神經網絡

前面總結了利用單神經元和Logistic迴歸解決簡單的二分類問題,接下來就是建立一個簡單的BP神經網絡模型了,也就是簡單的輸入層-隱藏層-輸出層網絡模型,相比起之前的模型僅僅多了一個隱藏層。   先給出直觀的網絡示意圖(注:圖來源

原创 [深度學習-2.2] 方差和偏差的理解

方差(Variance)和偏差(Bias)是看似是很基本的概念,但是深入理解會發現其中也包含着很大的學問。理解好方差和偏差能幫助我們改進擬合過程,從而得到更好地模型。   以下面這個簡單的數據分類問題爲例。我們希望將圖中的兩類樣本

原创 LeetCode-最長迴文子串

題目鏈接:最長迴文子串 給定一個字符串 s,找到 s 中最長的迴文子串。 解法一:暴力解法 暴力解法就是判斷原字符串的每一個substring是不是迴文串,返回最長的迴文子串。暴力解法的時間複雜度爲O(n3)O(n^3)O(n

原创 Python簡單搞定ndarray和DataFrame翻轉

ndarray矩陣反轉 a = np.arange(1, 10).reshape(3, 3) b = a[::-1] print(b) 會打印以下結果: [[7 8 9] [4 5 6] [1 2 3]] DataFram