MySQL UNION 用法

來源:https://dev.mysql.com/doc/refman/5.7/en/union.html

(SELECT a FROM t1 WHERE a=10 AND B=1)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2)
ORDER BY a LIMIT 10;

 

發表於 程式設計, 電腦資訊 | MySQL UNION 用法 已關閉迴響。

[轉錄]MySql 隨機排序輸出

來源:http://bittyferrari.blogspot.tw/2008/07/mysql-order-by-rand.html

MySql 隨機排序輸出 ~ ORDER BY RAND()
如果想隨機排序輸出某某資料~~~~~

就用 ORDER BY RAND()

SELECT * FROM products WHERE category_id = ‘3’ ORDER BY RAND() LIMIT 3

這樣就是隨機輸出~~~~3個

 

發表於 程式設計, 電腦資訊 | [轉錄]MySql 隨機排序輸出 已關閉迴響。

[轉錄] LibSVM 簡易入門

來源:https://puremonkey2010.blogspot.tw/2012/09/libsvm-piaip-libsvm.html

SVM, Support Vector Machine , 簡而言之它是個起源跟類神經網路有點像的東西, 不過現今最常拿來就是做分類 (classification)。 也就是說,如果我有一堆已經分好類的東西 (可是分類的依據是未知的!) ,那當收到新的東西時, SVM 可以預測 (predict) 新的資料要分到哪一堆去. 

Using SVM :
libsvm 有很多種用法, 這篇 tutorial 只打算講簡單的部分. 先來解釋一下幾個主要執行檔的作用: (UNIX/Windows 下檔名稍有不同, 請用常識理解我在講哪個) :

svmtrain
Train (訓練) data. 跑 SVM 被戲稱為 “開火車" 也是由於這個程式名而來. train 會接受特定格式的輸入, 產生一個 “Model" 檔. 這個 model 你可以想像成 SVM 的內部資料, 因為 predict 要 model 才能 predict, 不能直接吃原始資料. 想想也很合理, 假定 train 本身是很耗時的動作, 而 train 好可以以某種形式存起內部資料, 那下次要 predict 時直接把那些內部資料 load 進來就快多了.

svmpredict
依照已經 train 好的 model, 再加上給定的輸入 (新值), 輸出 predict (預測) 新值所對應的類別 (class).

svmscale
Rescale data. 因為原始資料可能範圍過大或過小, svmscale 可以先將資料重新 scale (縮放) 到適當範圍.

 

至於輸入檔案的格式, 可以參考 libsvm 裡面附的 “heart_scale":
[label] [index1]:[value1] [index2]:[value2] …
[label] [index1]:[value1] [index2]:[value2] …

一行一筆資料,如 :
+1 1:0.708 2:1 3:1 4:-0.320 5:-0.105 6:-1

而接著來說每一個欄位的意義 :
– label
或說是 class, 就是你要分類的種類,通常是一些整數.

– index
是有順序的索引,通常是放連續的整數.

– value
就是用來 train 的資料,通常是一堆實數.

– Cross Validation
一般而言, SVM 使用的方式(在決定參數時)常是這樣 :
1. 先有已分好類的一堆資料
2. 亂數拆成好幾組 training set
3. 用某組參數去 train 並 predict 別組看正確率
4. 正確率不夠的話,換參數再重複 train/predict

等找到一組不錯的參數後,就拿這組參數來建 model 並用來做最後對未知資料的 predict。 這整個過程叫 cross validation , 也就是交叉比對. 在我們找參數的過程中,可以利用 svmtrain 的內建 cross validation 功能來幫忙 :
-v n: n-fold cross validation

n 就是要拆成幾組,像 n=3 就會拆成三組,然後先拿 1跟2來 train model 並 predict 3 以得到正確率; 再來拿 2跟 3 train 並 predict 1,最後 1,3 train 並 predict 2。其它以此類推.

如果沒有交叉比對的話,很容易找到只在特定輸入時好的 參數。像前面我們 c=10 得到 92.2%,不過拿 -v 5 來看看 :
>svm-train.exe -v 5 -c 10 heart_scale

Cross Validation Accuracy = 76.6667%

平均之後才只有 76.6667%,比一開始的 86 還差!

– What arguments rules?
通常而言,比較重要的參數是 gamma (-g) 跟 cost (-c) 。而 cross validation (-v) 的參數常用 5; cost 預設值是 1, gamma 預設值是 1/k ,k 等於輸入 資料筆數。 那我們怎麼知道要用多少來當參數呢?
用 試 的!
是的,別懷疑,就是 Try 參數找比較好的值.

 

發表於 電腦資訊 | [轉錄] LibSVM 簡易入門 已關閉迴響。

[轉錄]線性與非線性

來源:https://cg2010studio.com/2013/03/13/%E7%B7%9A%E6%80%A7%E8%88%87%E9%9D%9E%E7%B7%9A%E6%80%A7/

一直搞不清楚線性與非線性的差異,網路上一堆解釋越看越糊塗,只好自己跳出來整理,果然一下子就明朗囉~一直以為線性是1對1,而非線性是1對多、多對1或多對多,錯啦~

linear nonlinear
維基百科這麼描述:
非線性是指兩個變數之間的關係,是不成簡單比例(即線性)的關係。
所謂線性,從數學上來講,是指方程的解滿足線性疊加原理,即方程任意兩個解的線性疊加仍然是方程的一個解。
線性意味著系統的簡單性,但自然現象就其本質來說,都是複雜的、非線性的。所幸的是,自然界中許多現象都可以在一定程度上近似為線性。
傳統的物理學和自然科學就是為各種現象建立線性模型,並取得了巨大的成功。而隨著人類對自然界中各種複雜現象的深入研究,越來越多的非線性現象開始進入人類的視野。
百度百科這麼描述:
非線性即non-linear,是指輸出和輸入不是成正比例的情形。
自變量與變量之間不成線性關係,成曲線或拋物線關係或不能定量,這種關係叫非線性關係
「線性」與「非線性」,常用於區別函數y = f(x)對自變量x的依賴關係。
線性函數即一次函數,其圖像為一條直線。其它函數則為非線性函數,其圖像不是直線。

 

發表於 電腦資訊 | [轉錄]線性與非線性 已關閉迴響。

[轉錄]如何使用 libsvm,以XOR為例

來源:http://smlie-blog.blogspot.tw/2014/11/algorithm-libsvmxor.html

libsvm是由台大資工林智仁老師實驗室所開發的強大軟體。但初學者的我,即使看了支持向量機器(Support Vector Machine) | 逍遙文工作室笨蛋也可以用libsvm。還是搞不懂這東西到底怎麼用。(我連笨蛋都不如Orz….)

弄了半天,總算有了小小的了解。記錄一下也分享跟我一樣是新手村的朋友。以我個人而言,搞不懂網路上這些文章到底在幹嘛,主要以下幾個原因:

  •  SVM原理不懂 
  •  沒有機器學習的Sense 
  •  範例太複雜
  •  英文有看沒有懂

因此,我使用類神經網路的第一個問題(XOR)來測試SVM。在這之前,先簡單解釋分類演算法不外乎以下幾個步驟:

  • 步驟一:資料收集 
  • 步驟二:資料前處理 (將格式轉換成符合訓練模型的格式)
  • 步驟三:訓練模型
  • 步驟四:測試模型
  • 步驟五:確認模型是否符合需求,若沒有則回步驟三從新訓練

了解這些步驟後,我們就開始試看看啦。如何下載安裝已有很多資料,這裡就不多說了,不清楚的朋友們可參考 [LibSVM] Support Vector Machine (SVM) 實驗。而我選擇認windows command的方式來操作libsvm,我認為這是最簡單也最方便的方法。( windows path = .\libsvm-3.19\windows。 )

接著就開始照上面的步驟來做測試,

    • 步驟一:資料收集
      • XOR真值表(利用真值表的四個狀態做為資料做為訓練資料):
        X1 X2 Output
        0 0 0
        0 1 1
        1 0 1
        1 1 0


 

    •  步驟二:資料前處理
      資料收集完成後,我們就要將資料轉換成libsvm看得懂得格式。

      • libsvm format :
        <分類> 0:<屬性> 1:<屬性>... K:<屬性>  
      • 將真值表轉換成libsvm format(檔案名稱 : xor.txt)
        0  1:0  2:0 
        1  1:0  2:1
        1  1:1  2:0
        0  1:1  2:1
      • 調整對應值
        svm-scale.exe  xor.txt > xor.txt.scale

        svm-scale主要目的將資料數值對應至[0,1]或[-1,+1]之間。若打開xor.txt.scale可發現xor.txt轉換成

        0  1:-1  2:-1
        1  1:-1  2:1
        1  1:1  2:-1
        0  1:1  2:1

 

    •  步驟三:訓練模型
      做完資料前處理之後,就可以開始訓練模型啦!!!!

      • 訓練指令
        svm-train xor.txt.scale
        產出:
        xor.txt.scale.model

        顯示:
        *
        optimization finished, #iter = 2
        nu = 1.000000
        obj = -2.504710, rho = 0.000000
        nSV = 4, nBSV =4
        Toatal nSV = 4

 

  • 步驟四:測試模型
    終於來到最後階段。到底由SVM模型準不準呢??

    先準備測試檔案。

    • xor-test.txt
      1  1:-1  2:1
      1  1:1  2:-1
      0  1:-1  2:-1
      0  1:1  2:1

    • 測試指令
      svm-predict xor-test.txt xor.txt.scale.model xor.res
      產出:
      xor.res
      顯示 :
      Accuracy = 100% <4/4> <classification>

Accuracy = 100%,這表示預測結果非常準,以上是我使用SVM預測XOR的結果。

Reference :
[1] LIBSVM — A Library for Support Vector Machines
[2] 支持向量機器(Support Vector Machine) | 逍遙文工作室
[3] 笨蛋也可以用libsvm。
[4] [LibSVM] Support Vector Machine (SVM) 實驗

 

發表於 電腦資訊 | [轉錄]如何使用 libsvm,以XOR為例 已關閉迴響。

[轉錄]過適 overfitting

來源:https://zh.wikipedia.org/wiki/%E9%81%8E%E9%81%A9

在統計學中,過適(英語:overfitting,或稱過度擬合)現象是指在調適一個統計模型時,使用過多參數。對比於可取得的資料總量來說,一個荒謬的模型只要足夠複雜,是可以完美地適應資料。過適一般可以視為違反奧卡姆剃刀原則。當可選擇的參數的自由度超過資料所包含資訊內容時,這會導致最後(調適後)模型使用任意的參數,這會減少或破壞模型一般化的能力更甚於適應資料。過適的可能性不只取決於參數個數和資料,也跟模型架構與資料的一致性有關。此外對比於資料中預期的雜訊或錯誤數量,跟模型錯誤的數量也有關。
過適現象的觀念對機器學習也是很重要的。通常一個學習演算法是藉由訓練範例來訓練的。亦即預期結果的範例是可知的。而學習者則被認為須達到可以預測出其它範例的正確的結果,因此,應適用於一般化的情況而非只是訓練時所使用的現有資料(根據它的歸納偏向)。然而,學習者卻會去適應訓練資料中太特化但又隨機的特徵,特別是在當學習過程太久或範例太少時。在過適的過程中,當預測訓練範例結果的表現增加時,應用在未知資料的表現則變更差。
在統計和機器學習中,為了避免過適現象,須要使用額外的技巧(如交叉驗證、early stopping、貝斯信息量準則、赤池信息量準則或model comparison),以指出何時會有更多訓練而沒有導致更好的一般化。人工神經網路的過適過程亦被認知為過度訓練(英語:overtraining)。在treatmeant learning中,使用最小最佳支援值(英語:minimum best support value)來避免過適。
相對於過適是指,使用過多參數,以致太適應資料而非一般情況,另一種常見的現象是使用太少參數,以致於不適應資料,這則稱為乏適(英語:underfitting,或稱:擬合不足)現象。

參考文獻[編輯]
Tetko, I.V.; Livingstone, D.J.; Luik, A.I. Neural network studies. 1. Comparison of Overfitting and Overtraining, J. Chem. Inf. Comput. Sci., 1995, 35, 826-833

 

發表於 電腦資訊 | [轉錄]過適 overfitting 已關閉迴響。

[轉錄]MySQL 無法使用 Group 指令

來源:http://stackoverflow.com/questions/34115174/error-related-to-only-full-group-by-when-executing-a-query-in-mysql

mysql> set global sql_mode=’STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’;
mysql> set session sql_mode=’STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’;

 

發表於 程式設計, 電腦資訊 | [轉錄]MySQL 無法使用 Group 指令 已關閉迴響。