Category: Computer


如果使用的是 MiKTeX 2.9

可以在
C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base
找到 LaTeX 的原始檔

LaTeX 一般也會包含說明檔 source2e,但我的 source2e 無法編譯,所以在網路上找到了編譯好的版本:
https://www.tug.org/texlive/Contents/live/texmf-dist/doc/latex/base/source2e.pdf

另外,你可能不會直接看到 source2e.pdf 所提到的原始檔 (例如:lt….dtx 檔),因為他們已經被包裝到 latex.ltx 和 latexa.ltx 檔內了。

第一次練習用 Python 寫 logistic regression。

Logistic regression 雖然已經有很多寫好的 package 可以用,不過我還是嘗試自己寫了一下,

讓自己熟悉 logistic regression 到底做了什麼,還有各個參數的特性。

 

Logistic regression 顧名思義就是用 logistic function:

h(z) = 1/(1 + exp(-z)).

為 fitting function 來 fit data 或說是做分類,logistic function 本人長這樣:

logistic-function

它的特性是,連續的從 0 到 1 遞增,當輸入 z < 0 時輸出 h < 0.5,當輸入 z > 0 時輸出 h > 0.5。

所以當你的 data 分布是大約以 z = 0 為分界,以上為 True (1),以下為 False (0),就可以用 logistic function fit 或分類出來。

如果分界點不剛好在 z = 0,或是 T 和 F 的區域相反,可以藉由不同的 fitting function 像是 z(x) = t_0 + t_1*x 輸入到 h(z) 來達到。

依此類推,你也可以 fit 更高維的 data,然後考慮 z(x1, x2, x3, …) = t_0 + t_1*x1 + t_2*x2 + t_3*x3 …。

或是更高次方的 fitting function,像是 z = t_0 + t_1*x + t_11*x^2 + t_111*x^3 …,等。

 

下圖的 2 維 data  點是由室友提供,藍點代表 1 (True),黃點代表 0 (False)。

可以看出來點的分布像是個歪斜的橢圓形,所以我使用一個 2 次的 function 來 fit 它:

z(x,y) = t_0 + t_1*x + t_2*y + t_11*x^2 + t_22*y^2 + t_12*x*y.

在給定 t_0 … t_12 後, 對於每一個 data 點代入 z (x, y) 再代入 logistic function, h(z), 並以 h(z) = 0.5 為分界

就可以預測每一點 (x,y) 大約是 T 或是 F

a-result

圖中紅色曲線代表 h(z) = 0.5 的曲線,就是這個 model 分類 T 和 F 的界線。

 

當然,真正 regression 的部分在於找到 model 的參數 t_0, t_1, …, t_12,讓 model 最符合 data。

對於一組參數 t_0, t_1, …, t_12,可以計算出 model 的 prediction ( h(z(x,y)) )與 實際 data 的誤差,

每一組 data 都可以算出誤差,這些誤差之合稱為 cost function (就像是高中學過的 X^2 一樣)。

Regression 的目的就是找到一組參數 t_0, t_1, …, t_12 使得 cost function 最低。

也就是說 regression 就是一個找最小值的問題。

 

要找到一個 function 的最小值,最簡單的般法就是 gradient descent。

先計算 cost function 在該點的梯度,然後讓參數 t_0, t_1, …, t_12, 往 cost function 減少最快的方向前進一段距離。

再重新計算梯度,再前進。

重複夠多次之後,就會逼近最小值,找到 model 的參數。

 

上圖為 gradient descent 前進 1000 次的結果,

可以看的出來,還不是 fit 得很好,因為我使用的方法相當簡單,每次前進的步伐是固定的

較為進階的演算法,會每一步調整最佳的前近距離,收斂的就會更快更有效率。

 

總之,logistic regression 是個相當有趣的 python 練習,另外也是做 data scientist 和 neural network 的第一步。

 

My code and data: http://github.com/louis925/Logistic-Regression-Oval

Coursera 上關於 Machine Learning 的線上開放課程 (由 Stanford University 教授上課): http://www.coursera.org/learn/machine-learning/home/welcome

Numpy 是 Python 中處理數學相關的一個強大 package,要使用 Numpy 前請先安裝 Python

下面提供在 Windows 上已安裝好 Python 後,要加入 Numpy package 的方法

  1. 開啟命令提示字元
  2. 執行 python -m pip install -U pip setuptools
    (如果命令提示字元不認得 ‘python’,請先把 python 資料夾 C:\Python27 和 C:\Python27\Scripts 加入到 Windows 的 path 環境變數內)
    (舉的例子為 python 2.7 版)
    (如果 pip 無法更新,請試試看重新安裝新版的 Python 2.7 或 3.6)
  3. 執行 python -m pip install wheel
  4. 到 Laboratory for Fluorescence Dynamics ( http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy ),下載  NumPy 的 Wheel 安裝 package (.whl 檔),請依python 版本和電腦系統版本做選擇。(例如:我裝的 Python 是 2.7 版 32 位元,我就下載 “numpy-1.12.0+mkl-cp27-cp27m-win32.whl")
  5. 到剛剛下載的資料夾啟動命令提示字元 (檔案總管,在資料夾空白處,按 shift + 右鍵 > 在此處開啟命令視窗(W))
  6. 執行 pip install numpy-1.12.0+mkl-cp27-cp27m-win32.whl (這裡 numpy-1.12.0+mkl-cp27-cp27m-win32.whl 是剛剛下載的 Wheel 檔)
  7. 安裝完成後,到 Python IDLE,執行看看 import numpy as np ,如果沒有出現問題就是安裝成功了

Mathematica 10 似乎有個 bug

安裝 Mathematica 10 並使用一陣子之後,就會發生在開新的 Notebook 並鍵入任意兩個字元後,Mathematica 就 Lag 一陣子

這狀況會隨著使用的時間越長,持續惡化

原因似乎是 Autocomplete 的 bug

Windows 7 下的解決辦法是到下列目錄

C:\Users\[Your User Name]\AppData\Roaming\Mathematica\SystemFiles\FrontEnd\SystemResources\FunctionalFrequency\

把 CodeAssistHistory10.*.m 開頭為檔名的紀錄檔刪掉。

這檔案不會影響 Mathematica 的運作

mathematica-10-bug-file

通常發生問題的時候,這個檔案都會有數 100 MB 大。

References:

http://mathematica.stackexchange.com/questions/120803/mathematica-10-4-freezing-after-typing-in-new-notebook?noredirect=1&lq=1

http://mathematica.stackexchange.com/questions/109005/segmentation-fault-on-auto-complete

Windows 7 SP1 在某次更新之後或全新安裝的情況下,

會發生 Windows Update 在檢查更新時,CPU 使用量會非常高,且掃描更新時間過長或卡住的狀況。

下面提供解決辦法:

  1. 關閉 Windows Update 服務 (若不關閉,更新包有可能無法安裝)
    (控制台 > 系統及安全性 > Windows Updates > 變更設定 > 選 “永遠不檢查更新",後按確定。)
  2. 重新開機
  3. 手動下載並安裝 Windows 7 和 Windows Server 2008 R2 的 2015 四月更新包 (KB3020369)
    1. 32 位元 http://www.microsoft.com/zh-TW/download/details.aspx?id=46827
    2. 64 位元 http://www.microsoft.com/zh-TW/download/details.aspx?id=46817
  4. 手動下載並安裝 Windows 7 和 Windows Server 2008 R2 的 2016 七月更新包 (KB3172605)
    1. 32 位元 http://www.microsoft.com/zh-TW/download/details.aspx?id=53335
    2. 64 位元 http://www.microsoft.com/zh-TW/download/details.aspx?id=53332
  5. 重開機後,恢復 Windows Update 服務並檢查更新

資料來源 (英文):

http://superuser.com/questions/951960/windows-7-sp1-windows-update-stuck-checking-for-updates
http://support.microsoft.com/en-us/kb/3200747

相關資料 (英文):

April 2015 servicing stack update for Windows 7 and Windows Server 2008 R2 – http://support.microsoft.com/en-us/kb/3020369
July 2016 update rollup for Windows 7 SP1 and Windows Server 2008 R2 SP1 – http://support.microsoft.com/en-us/kb/3172605

這問題也困擾我一年多了。但不知為何,這些消息都只有英文的網頁,台灣微軟都沒有翻譯這些問題和解決方案,因此只好幫他們翻譯一下。

據說這是因為舊版 Windows Update 使用 AddSupersedenceInfoIfNeeded 方法,非常之慢。更新之後會快許多。

LaTeX 測試

原來 WordPress 上可以打 LaTeX 的方程式啊!

\left(\boxempty+m^{2}\right)\phi=0

防止加密勒索軟體

最近加密勒索軟體又造成一批災情

加密勒索軟體已知的傳染途徑有:

  1. 瀏覽網頁 (該網站中毒或廣告夾帶病毒)
  2. 網頁上的 Flash
  3. 網頁上的 Java
  4. Email 夾帶或網路上下載的 PDF 檔
  5. 開啟中毒的 Office 檔案,如:Excel, Word, ppt 檔
  6. KMPlayer 撥放器的更新夾帶病毒
  7. USB 隨身碟病毒
  8. 網路上非法下載的軟體或小工具含病毒
  9. NAS 的漏洞
  10. kkman 的漏洞 (內部使用 IE 6.0)
  11. TeamViewer 駭客入侵

通常會中勒索軟體的人有下列共通因素:

  1. 沒有做 Windows 更新
  2. 沒有更新 IE
  3. 沒有更新 Flash Player
  4. 沒有安裝防毒軟體

防止的對策如下:

  1. 每個月做 Windows Update
  2. 更新 IE 和 Chrome
  3. 更新 Adobe Flash Player
  4. 更新 Adobe Reader 和 Adobe Acrobat
  5. 更新 Java ,或完全移除 Java
  6. 更新 Microsoft Office
  7. 更新 NAS
  8. 安裝防毒軟體,並定時更新 (小紅傘可能無用)
  9. 不要使用 IE,改用 Chrome 或 Edge 作為瀏覽器
  10. 不要使用 Windows XP,使用 Windows 7/8/10 等以上版本的作業系統
  11. 不要使用 KMPlayer、迅雷下載
  12. 不要使用 kkman,改用 PCMan (非 Combo 版)
  13. 不要開啟來路不明的 PDF 檔,尤其是 Email 的附件或是網路上下載的。
  14. 不要安裝 TeamViewer
  15. Windows 啟用 使用者帳戶控制 (UAC)
  16. 最重要的是電腦檔案必須 定期備份!

以上都要完全做到,才能完全避免。更新的部分必須每個月自動更新。

由於加密勒索軟體會對所有可以找到的檔案 (包括網路硬碟) 都做加密,所以任何可以存取你的共享資料夾 (dropbox, 網路硬碟) 的電腦都必須做到這些防護,才能完全避免中毒。

最後更新 2016/06/05

防止自動升級為 Windows 10

方法一 – 使用本機群組原則 (限 Windows 7 專業版、旗艦版、企業版)

  1. 開啟 本機群組原則 (鍵盤按 Win + R,輸入 gpedit.msc 後按 Enter)
  2. 本機電腦 原則 > 電腦設定 > 系統管理範本 > Windows 元件 > Windows Update
  3. 點兩項開啟 Turn off the upgrade to the latest version of Windows through Windows Update.
  4. 已啟用,後按 確定

註:系統需已安裝 Windows 更新 KB3065987

方法二 – 修改登錄檔

  1. 開啟 登錄檔編輯程式 (鍵盤按 Win + R,輸入 regedit 後按 Enter)
  2. 瀏覽到 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate
  3. 在右側窗格按右鍵,選 新增 > DWORD (32-位元) 值
  4. 輸入名稱 DisableOSUpgrade
  5. 點兩下修改它的值,將值由 0 改為 1
  6. 按確定即可完成

右鍵新增 DWORD 值

輸入 DisableOSUpgrade

將值改為 1

隱藏升級 Windows 10 的圖示:

在登錄檔: HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Gwx 下,增加 DWORD 值 DisableGwx = 1

資料來源:https://support.microsoft.com/en-us/kb/3080351

前言:Toshiba R30 Windows 7 MBR 轉GPT 格式開機

之前說過,UEFI 的主機板必須搭配 GPT 的硬碟分割格式開機才是正確的。

但是自行安裝 Windows 7 時常常會遇到不小心以舊的 MBR 分割去格式化硬碟 (畢竟 Windows 7 安裝光碟一般都還滿舊的),灌好系統了才發現是 MBR 分割,但要重灌也很麻煩。

因此下面提供如何在有裝 Windows 系統的電腦上從 MBR 分割轉 GPT 分割而不須重灌 (來源是 http://social.technet.microsoft.com/wiki/contents/articles/14286.converting-windows-bios-installation-to-uefi.aspx )

系統要求:

  1. 電腦可以以 UEFI 開機
  2. 已安裝 Windows 7/8 x64
  3. 電腦可以從 USB 或記憶卡開機
  4. 一個可以開機並安裝 Windows 8 的 USB 隨身碟 (建議為 Windows 8 的安裝光碟,就算安裝的作業系統是 Windows 7)
  5. BitLocker 已完全關閉
  6. “標準"的 Windows 安裝,Windows 的分區前方至少有約 229 MB 的啟動磁區或空間。
    分區資訊可以透過下列步驟 8. 到 11. 來檢視。沒有這些空間,就無法建立必須的啟動磁區。如果你的電腦沒有,那麼可以用 Acronis True Image (試用版即可) 或 Easeu Partition Master (沒用過) 來調整分割位置。(前方沒有空間的話請不要繼續)

建議:

  1. 強烈建議先備份所有的檔案和系統
  2. 將此說明下載到其他裝置或列印出來,因為執行部分步驟時你的 Windows 無法運作
  3. 這個步驟可能會讓電腦或筆電原廠附的還原磁區失效,建議你先把這個還原映像檔複製出來。

步驟:

  1. 確定 Windows 安裝隨身碟可以開機並進入維修模式
  2. 開機進入 Windows,在 Windows 下找出要轉換的磁碟編號 (通常是 0)。這可以用 Windows 磁碟管理來判斷。
  3. 下載 gptgen (http://sourceforge.net/projects/gptgen),並解壓縮它。這個工具可以讓你把 MBR 轉換為 GPT 分區。(也可以用 Windows 的磁碟管理辦到,但是 Windows 應該不會讓你轉換正在使用的系統碟。)
  4. 注意:此步驟後,電腦就無法正常啟動進入作業系統,不可中途關閉電腦。
    以工作管理員權限開啟命令提示字元 (CMD),移至下載的 gptgen.exe 的資料夾,輸入並執行

    gptgen.exe -w \\.\physicaldrive0

    結尾的 0 是第 2. 步找到的磁碟編號。執行此步驟後,電腦有可能會藍屏當機,是正常的。若沒有當機請正常關機。(Windows 7 下我沒有遇到當機情況)

  5. 以 Windows 安裝隨身碟開機,進入 Windows 安裝程式
  6. 選擇語言和鍵盤後進入命令提示字元 (CMD)
    (Windows 8 安裝隨身碟 選 修復您的電腦 (R) > 疑難排解 > 進階選項 > 命令提示字元)
  7. 輸入
    diskpart

    以進入磁碟分區工具。

  8. 輸入
    list disk

    找出原 Windows 系統的開機磁碟編號,你會看到類似下列畫面:

       Disk ### Status        Size    Free    Dyn Gpt
       -------- ------------- ------- ------- --- ---
     * Disk 0   Online        128 GB      0 B      *
  9. 找到後,標記該磁碟
    select disk 0
  10. 確認該磁碟的分割:
    list partition
  11. 會看到類似下面的畫面:
     Partition ### Type             Size    Offset
     ------------- ---------------- ------- -------
     Partition 1   Primary          229 MB  1024 KB
     Partition 2   Primary          126 GB   229 MB

    (前面的啟動磁區可能不一定是 229 MB。後面數百 GB 的空間通常是 Windows 的空間,小心不要動到)

  12. 刪除舊的啟動磁區 (可以由大小判斷,小心不要誤刪 Windows 作業系統分區)
    select partition 1
    delete partition
  13. 建立新的 100 MB 的 EFI 啟動磁區並格式化為 FAT32 ,然後再建立 128MB 的 Microsoft 保留磁區 (MSR)
    create partition EFI size=100 offset=1024
    format quick fs=fat32 label="System"
    assign letter=S
    create partition msr size=128 offset=103424

    (注意參數的 size 是以 MB 計算,但 offset 是以 KB 計算。另外,UEFI 的開機磁區只能是 FAT32 不能用 NTFS。)

  14. 再確認一次磁碟分割清單 (list partition),應該要看到類似下列畫面:
     Partition ### Type             Size    Offset
     ------------- ---------------- ------- -------
     Partition 1   System           100 MB  1024 KB
     Partition 2   Reserved         128 MB  101 MB
     Partition 3   Primary          126 GB  229 MB

    由於開頭的 1 MB 無法使用,所以第一個分割預設的 offset 會自動調整為 1024 KB。

  15. 確保 Windows 作業系統的分割有被掛載,將它的 volume 代號重設 (通常是 C 槽)
    list volume
    select volume 3
    assign letter=c
  16. 離開 diskpart:
    exit
  17. 重建開機分割資訊,引導開機到新的 Windows 的磁碟分割 (通常是 C 槽):
    bcdboot c:\windows /s s: /f UEFI

    其中 c: 是 Windows 作業系統的位置,s: 是剛才建立的 EFI 啟動磁區的代號。UEFI 指令只有 Windows 8 以上的安裝光碟的 bcdboot 才有。

  18. 重新開機

Windows 10 的 bug

最近重裝了 Windows 10 想說來試試看,

雖然發行已經一年了,Windows 10 仍然有很多 bug,下面是我注意到的:

2016/05/16

  1. 預設應用程式的設定值會不定期被微軟的 App 取代。被取代之後,該設定值會無效,無法變更開啟檔案用的預設程式
  2. 中文版若使用注音或部首排序,會造成右下角的日曆小視窗無法開啟
  3. 日曆小視窗打開後,再按一下無法關閉
  4. 若使用 Microsoft 帳號登入 Windows,該帳號會無法被遠端桌面連線。
  5. Google Chrome Remote Desktop 在 Windows 10 下無法連線出去
  6. 有時後 Windows 的 “設定" 會自行關閉
  7. 無法關閉 Metro App 內的捲動特效 (捲動都會帶有延遲)
  8. 開始功能表有時會無法打開
  9. 視窗邊界過小,調整視窗大小有些困難。而且當視窗上下拉到最大之後,下緣會無法調整,無法再拉回縮小。
  10. 部分釘選到快速存取的資料夾,無法取消釘選
  11. Edge 的我的最愛列無法手動修改連結,也無法匯出
  12. Windows 的 “設定" 裡的設定值並不會即時反應 控制台 的設定值,所以無法確定 “設定" 內的值是否已被設定。
  13. 電源選項 中,可以調整 變暗的顯示器亮度,但是少了 顯示器變暗前的時間 的設定選項。

2016/11/05 為什麼 Windows 10 開始磚牆不方便?

  1. 開始畫面的磚牆,每個程式的圖示都被強迫加上矩形的底色。這讓要找程式相當不方便。因為很多時候,判斷一個程式的圖示,第一眼會先從輪廓判斷起。如果外框都是正方形的,差異性就不明顯。使用者就會需要多花一點時間看細緻的圖案。
  2. 開始畫面的磚牆,無法像 Windows 7 一樣把文字放在圖示右側,這也讓以名稱來找程式不方便。因為有時候使用者也許不記得圖示長什麼樣子,只知道該程式的名字。又或是第一瞬間的反應是程式的名稱而不是圖案。在磚牆的設計上,名字都是在磚的下方,一方面字體太小,不易閱讀。另一方面,因為磚是方塊狀排列的,搜尋時視線需要不斷的做 Z 字型的掃瞄,效率較差。相較於 Win 7,程式清單的排列是直條狀的,尋找時視線從上到下掃瞄非常方便。
  3. 開始畫面左側空間浪費。一般使用者進入開始畫面時,通常會透過滑鼠點擊左下的"開始",所以進入開始選單時,滑鼠指標會在螢幕左下角的位置。因此開始畫面左邊的空間非常寶貴,應該要放最重要或最常用的程式按鈕。Win 10 左側被設計只能顯示常用程式,而使用者自訂的磚牆卻放在右側。問題是常用程式通常都不怎麼常用,有些舊程式不管用幾次都不會顯示在上面。所以使用者會想要自訂最常用最重要的程式在磚牆上。但是重要的磚牆,位置卻在較遠的右邊。造成每次滑鼠都要先移到左下,再移到右側按程式。動線設計上不太有效率。
  4. “所有應用程式" 的清單,排列過於稀疏。相較於 Windows 7 一個畫面可以顯示 30 多個程式, Windows 10 的清單間距過大,只能顯示 10 多個程式,還會出現實用性不大的 A,B,C…。若要瀏覽所有應用程式清單來找程式,很不方便。當然你可能會說,如果我要搜尋,就直接打鍵盤就好。當然用鍵盤搜尋是非常實用的方法,但換個想法,如果我只會用鍵盤搜尋,那設計這清單還要幹嗎? 可以乾脆拿掉。況且使用者可能不想打字,或是根本不記得程式名稱。
  5. 如前面所說的,開始畫面有時會打不開。
  6. 由於開始畫面也是 Metro App,捲動的時候會有討厭的延遲動畫特效。這讓使用滑鼠的人,常常覺得滾輪好像 lag 一樣,滾不太動。而且有時選單還會莫名的回滾。