2021年3月14日 星期日

類神經網路 基本入門

今天我們要介紹類神經網路與演算法

單一神經細胞

圖1


假設圖1是一個神經細胞元,在神經細胞傳遞中需要有輸入,也需要包含輸出,每個神經元可能會包含多個輸入(A & B),加上一個或多個Bias(b),並包含一個輸出

我們通常會以一個簡單的公式來計算輸出值Y=A*W1+B*W2+b

W1與W2就是類神經元的權重


多層類神經架構

圖2

圖2為一個多層類神經架構,包含輸入層、隱藏層與輸出層

W的計算為 A*W11+B*W21+b1

X的計算為 A*W12+B*W22+b1

輸出Y則是W*N11+X*N21

在神經網路中W與N這些都代表權重值,而權重本身影響決策

在訓練過程中,權重會依照每次計算結果的誤差進行修正

初始權重值通常是經驗值或亂數決定


實際運算

表1
表1為一個AND閘,並使用圖2作為類神經訓練的架構

計算時先假設所有權重初值皆為1(實務上為亂數),並忽略Bias

那麼計算出來的Y=(1*1+1*1)*1+(1*1+1*1)*1=4

圖3
當輸出等於4時,與我們預設的輸出目標1差距過大,此時就需要進行權重修正

如圖3所示,經過運算後的delta值為-3,因為delta值為負表示計算結果離目標輸出過大,那就需要將權重W與權重N調小

假設修正公式W(new)=W(old)+beta*delta=W(old)*0.2*(-0.3)           

                        Ps.假設beta=0.2(該值依經驗調整)

權重修正計算如下

W11=W11+beta*delta=1*0.2*(-3)=0.4

W12=W12+beta*delta=1*0.2*(-3)=0.4

W21=W21+beta*delta=1*0.2*(-3)=0.4

W22=W22+beta*delta=1*0.2*(-3)=0.4

N11=N11+beta*delta=1*0.2*(-3)=0.4

N21=N21+beta*delta=1*0.2*(-3)=0.4

修正後權重結果為0.4


重新運算輸出得到如下

Y=(1*0.4+1*0.4)*0.4+(1*0.4+1*0.4)*0.4=0.32 

新的誤差量已降至1-0.32=0.68

依照上述方式不斷運算直到誤差量等於0.便完成訓練

但實務上運到0是非常耗時的且可能落入區域極值

故我們可能會設定目標0.0001或0.001這樣趨近於0的目標.較0符合經濟效益

教學與操作影片



蝦咪! VBA網頁爬蟲也能用Xpath抓資料!!?

今天我們要講解的是,如何使用VBA+網頁XPath來抓取GoodInfo股票資訊

VBA使用的套件為MSXML2.XMLHTTP、與HTMLFile

MSXML2.XMLHTTP可以幫助我們進行網頁連線並取得內容

HTMLFile能夠利用網頁元件ID取得網頁資料

另外我們還自己寫了一些函數,將網頁標籤階層轉為Xpath ID,以便HTMLFile提取資料

今天要抓取的標的一樣是大立光,股票代號3008,

首先抓取公司名稱與產業別,這邊使用MSXML2.XMLHTTP進行網頁連線,並等待連線完成

連線完成後,呼叫函數進行解析,並使用Xpath ID取出資料

接著來抓取股利政策,一樣使用MSXML2.XMLHTTP進行網頁連線,並等待連線完成

由於表格某些資料佔用不只一欄或一列

所以我們必須先計算表格的欄數與列數

並且手動補齊,避免標頭有空白資料的狀況

再來設定要抓取的資料

找出資料欄位的索引值

最後取得表格的內容

接著抓取獲利狀況,首先使用MSXML2.XMLHTTP進行網頁連線,並等待連線完成

先計算表格的欄數與列數

補齊標頭資料

設定要抓取的資料

找出資料欄位的索引值

最後取得表格內容

最後來介紹我們寫的幾個簡單的函數

Prefix_Start作用是遇到標籤起頭將階層ID增加一層,並決定陣列索引

比如html開始的語句<html lang="zh-Hant">會被新增一個 id='/html[1]/' 屬性

如果這一次的階層(strPrefix)跟前一次的階層(strLastPreFix)為同一階層,我們會把前一次階層陣列的索引值取出加1後,指定給這次的陣列索引

前一次div陣列索引為1,這一次div陣列索引就增加為2

在解析股利政策時,我們有遇到兩個table中間插入一個div的狀況,所以需要多做一個從頭判斷ID有沒有曾經出現過,如果有索引就不是從1開始



Prefix_Finish作用是遇到標籤結尾將階層ID回推一層

如果發現是標籤結尾,往前找/後截斷字串,將階層回推一層


Parse_Html主要的工作就是判斷是否為標籤頭尾,如果是我們要的就進行處理


我們鎖定的標籤為html, body, div, table, thread, tr, td這些Xpath所需要的

在處理公司名稱時,遇到網頁原始碼中有一些問題,會讓我們的解析錯誤,上面的是單引號不匹配,下面的則是前一個<tr>沒有使用</tr>做結尾,就進入下一個<tr>



如果要自行解析Html,遇到問題時,建議使用下列網址,先檢測網頁原始碼http://validator.w3.org/

最後我們來看一下Get_Html_ID,這個函數功能是將Xpath節點名稱,加工為需要的ID

不需要的tbody被我們移除,沒有索引的標籤被加入[1]的陣列索引



教學與操作影片



2021年3月7日 星期日

用C#爬出GoodInfo股票資訊

今天我們要講解的是,如何使用C#+網頁XPath來抓取GoodInfo股票資訊

C#使用的套件為HtmlAgilityPack、與RegularExpressions

HtmlAgilityPack可以幫助我們取得網頁內容與提取資料

與RegularExpressions能夠快速取得或移除字串內容

今天要抓取的標的跟上支影片一樣是大立光,股票代號3008

首先抓取公司名稱與產業別

這邊設定UserAgent,模擬瀏覽器的行為並使用UTF-8編碼,接著使用HtmlWeb.Load取得了網頁內容,抓出公司名稱XPath節點與產業別XPath節點,最後將資料印出



我們接著來抓取股利政策,一樣使用HtmlWeb.Load取得網頁內容


由於表格某些資料佔用不只一欄或一列,所以我們必須手動補齊,避免標頭有空白資料的狀況


再來設定要抓取的資料

最後取得表格的內容

這邊要注意的是,子節點的內容並不是連續的td

因此需要先做一次篩選的動作

最後透過抓取獲利指標來複習一下,第一步就是使用HtmlWeb.Load取得網頁內容

計算資料佔用的欄與列

補齊標頭資料

設定要抓取的資料

最後取得表格內容

一樣要注意,td節點內容才是我們想要的



教學與操作影片

2021年3月1日 星期一

關於我們

大家好,我們是維京碼農,一群各行業奮鬥的小螺絲, 創建這個頻道,希望能幫更多人利用簡易的程式讓生活更便利, 我們熟悉的程式語言有Python、C#、VBA, 主要是做文書自動化與儀器控制, 如果有任何程式上的問題或需求, 歡迎來信與我們聯繫 vickingprogrammer@gmail.com

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Blogger Templates