發表文章

My Note - K-means Cluster

K-means 分群法 使用分割式分群法(partitional clustering)時,必須先指定群聚的數目,然後藉著反覆疊代運算,逐次降低一個誤差目標函數的值,直到目標函數不再變化,就達到分群的最後結果。 在所有的分割式分群法之中,最基本的方法,就是所謂的 K-means 分群法(k-means clustering),又稱為Forgy's algorithm。主要目標是在大量高維的資料點中找出具有代表性的資料點,這些資料點可以稱為是群中心(cluster centers)、代表點(prototypes)、codewords等,然後在根據這些群中心,進行後續的處理,這些處理可以包含: 1.資料壓縮:以少數的資料點來代表大量的資料,達到資料壓縮的功能。2.資料分類:以少數代表點來代表特定類別的資料,可以降低資料量及計算量,並可以避免雜訊的不良影響。分割式分群法的目的是希望盡量減小每個群聚中,每一點與群中心的距離平方誤差(square error)。E = Sk=1~c ek分群的方法,就變成是一個最佳化的問題,換句話說,要如何選取 c 個群聚以及相關的群中心,使得 E 的值為最小。 也可以用另一方式來描述,給定一組 n 點資料 X = {x1, ..., xn},每一點都有 d 維,k-means 分群法的任務是找到一組 m 個代表點 Y = {y1, ..., ym},每一點也是d維,以使下列的目標函數越小越好: J(X; Y, U) = Si=1nxi-yk2在演算法開始進行前,必須事先決定好預期分群的群聚數目。假設預期的分群群聚數目為c,則根據上述觀察,可經由下列步驟來進行 k-means 分群法: 1.隨機選取 c 個資料點,將之分別視為c 個群聚的群中心,這就是Y。 2.由固定的Y,產生最佳的U。換句話說,對每一個資料點x,尋找與之最接近的群中心,並將x加入該群聚。 3.計算目標函數 J(X; Y, U),如果保持不變,代表分群結果已經穩定不變,所以可以結束此疊代方法。 4.再由固定的U,產生最佳的Y。跳回第2個步驟。由於只能找到局部最小值,所以如何選一組好的起始點,就變得很重要。以上述方法來說,若要選取 c 個起始中心典,常用的選取方法有下列幾種: 1.從資料裡面隨意選出 c 點資料2.找出離所有資料平均值最遠的 c 個資料點3.找出離所有資...

PHP -利用mkdir函數建立中文資料夾無亂碼方案

因為自己龜毛,想要在家族的網站上設立一個為使用者 開啟個人資料夾 的功能,因為這樣可以讓使用者方便將自己的東西直接上傳到資料夾內(先前的網站必須還要由管理者移動),管理者才不用 事後移來移去 (其實管理者很懶惰XD) 於是乎 這種想法產生就也伴隨著 無止盡的殘忍後果 正當我很高興的 mkdir("0777","中文") 給它時... 蝦米,是亂碼!!!!!! 好吧,既然他誠心誠意的出現了 我也要大發慈悲的解決他!!!! 我找阿找,找遍怕太太(這大概只有老一輩玩過BBS的人才知道這個名稱吧~)和X學園,不是建議用英文就是講一堆廢話然後叫你不要有這個想法(這我要特別提出來講是因為,如果有一天你老闆同樣交代了這件事,你會沒試過就要跟他說沒辦法嗎?雖然並非老闆要求,但這種 不敬業 的態度我做不到) 於是乎有位鄉民 暗丟 水球給我,跟我講了另一個方法可試試看,真是太感謝了!!!! 我就去找了 iconv 來玩玩 結果,壓呼!!!!壓倒性的勝利....喔不,是暫時解決了這個問題!!!! 好,於是我高興到想要將他PO出來,因為我真的找不到這個問題的解決方案,而且我有一些也要說明阿~~~~ 來來來,做法是這樣 $dir_name=iconv("utf8", "big5", $dir_name); //將資料夾名稱編碼為big5,utf8是我寫程式所用的編碼 $path="upload/reports/$dir_name"; //路徑,我習慣額外設定 mkdir($path,'0777'); //建立資料夾!!!! 就是這樣~~喵~~~ 各位看倌不曉得看這麼多廢話後,你有沒有豁然睜大雙眼的感覺!!?

Smarty - 陣列用法

圖片
這幾天忙CASE忙到 快瘋掉 ,但是有發現一些不常用的東西,整理出來 避免忘掉 吧!!! 這幾天做問卷統計,卻發現,統計總筆數的時候用 foreach 會照問卷數跑許多迴圈 於是乎,查了一下 smarty手冊 ,發現其實要print陣列有其他的方法 假如說我的陣列是 二維以上 $array[first][second]; 那麼當assign $array後,在template要如何 取出 ? 只要用 {$array.first.second} 即可!!! first及second可以跑 迴圈 直接填入0-N的數字!妙吧!!

長尾理論 - The Long Tail

長尾理論,這個理論探討因Internet/大型通路的活動,打破了舊的80/20法則,而產生了一種新的銷售/購買行為:The Long Tail。 1897 年,義大利經濟學者帕列托發現了80/20法則(Pareto Principle),即20%的人口享有80%的財富,80%的收穫,來自於20%的付出;80%的結果,歸結於20%的原因。如果能找到關鍵的 20%,並分配多數資源,那麼就可以花最小的力氣,賺到最多的錢。「一分耕耘,一分收穫」,並不能解釋現實世界中大部份的情況。付出與努力之間的關係,不 是五十/五十,而是八十/二十。這樣的不平衡,出現在幾乎所有的工作領域與生活範圍:在工作方面,大部分的員工對公司的收益來說是沒有正面幫助的,少數的 顧客為公司帶來大部分的利潤,少數居高位的人拿走了大部分的酬勞。集中精力在20%的成效上,就能發揮最大的效益。 2004年10月,《連線》雜誌主編Chris Anderson在一篇文章中,首次提出了一個 長尾理論(The long tail) :只要通路夠大,非主流的、需求量小的商品「總銷量」也能夠和主流的、需求量大的商品銷量抗衡。長尾就是80%的過去不值得一賣的東西,長尾實現的是許許 多多小市場的總和,長尾是熱賣品向niches的轉變。由此可見,The Long Tail的適用對象,是瞄準「大型通路」,例如:Internet、量販店、大型書店、超商連鎖店,有點像是用亂槍打鳥的方式,平衡收益。通路大提供的商 品就多,因此可以在熱賣商品以外,創造出次暢銷品的銷售數字。 在Internet上的實例就是 Amazon跟Google,Google目前有一半的生意,來自於的AdSense,廣告不再高不可攀,它是自助的,價廉的,誰都可以做的,對成千上萬 的Blog站點和小規模的商業網站來說,在自己的站點放上廣告已成舉手之勞,數以百萬計的中小企業代表了一個巨大的長尾廣告市場。Google目前因為沒 有其他的競爭對手,因此可以寡佔 80% 的中小企業長尾廣告市場,然而這個現象會不會在對手提供類似服務後,市場佔有率下降後消失呢?我也不曉得,但至少目前看來,Internet上的世 界,Amazon跟Google還是第一品牌。 對個人或是提供產品的公司來說,The Long Tail就是一個參考的指標與現象,必須瞭解到,一旦鋪貨上架後,如果不是暢銷商品...

PHP 字串間加入特殊符號

最近改CASE改到 焦頭燥耳 .. 但是也不能因此而 冷落 掉我的BLOGGER~ 來分享一下PHP的一些 延伸用法 這次改CASE遇到廠商要求把行動電話號碼 0912345678 改成 0912 - 345678 的問題 不管是針對電話號碼還是其它的格式,使用 substr函數 通通可以 輕鬆搞定 $str="0912345678"; //欲開刀的電話號碼字串 $split= "-"; //要插入的特殊符號 $fin_str = substr($str,0,4).$ split .substr($str,4); //字串前4個字+特殊字符+字串第4個字元後的字串 echo $fin_str; //叫出來看看!!!如果怕許功蓋可用 htmlspecialchars 再輸出 簡單的用法就如上所述,尚有其他技巧,等這週忙完再來PO!!!