20090702

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.找出離所有資料平均值最近的 c 個資料點 4.找出距離平方和最小的 c 個資料點上述討論的方法,通常又稱為 batch k-means algorithm,另一個類似的方法稱為 sequential k-means algorithm 或是 on-line k-mean algorithm,則是每當收集到一筆資料時,就可以更新群中心,方法如下: 1.隨機選取c的起始點,將之分別視為c個群聚的群中心 2.對每一個資料點x,尋找與之最接近的群中心,並將x加入該群聚,隨即計算新的群聚中心(該群聚中原有的資料點加上x後的平均向量) 3.檢查每一個資料點目前與之最接近的群聚中心是否和他的群聚分配一致,如果不是,則回到步驟二,反覆疊代,直到收斂。 一般而言, sequential k-mean algorithm的優點如下: 1.適用於資料特性隨時間而變的情況。 2.計算簡單,適用於硬體實現。
除非有特殊情況,否則很少使用 sequential k-mean algorithm。
發現叢集(Discovering Group, Clustering)
群集分析(cluster analysis)又稱為資料切割(data segmentation)、非監督式分分類(unsupervised classification),他是一種多變量統計分析(multivariate statistical analysis)的技術,主要目的是將資料集合中的資料紀錄,又稱為資料點、觀察值或案例,加以分群成數個群集(cluster),使的每個群集中的資料點間相似程度高於其他群集中資料點的相似程度。因此群集分析主要的杜地在於分析資料彼此間的相似程度,藉由分析所找到的群集結果,推論出有用、隱含、令人感興趣的特性和現象。相對於分類法中每一筆訓練資料紀錄都給訂一個類別資訊,並企圖從中找出一個判斷模式來預測未知類別資訊得資料紀錄;在群集分析的過程中,並沒有預先指定好的類別資訊,也沒有任何資訊可以表示資料紀錄彼此之間是相關的,所以群集分析被視為一個非監督式學習(unsupervised learning)的過程。
群集在data mining中所扮演的角色:
*資料精簡:透過群集分析將原本大量的資料加以分群成數個群集,並從每一個群集中挑選具有代表性的資料
記錄來進行後續的處理。
*推論假設的產生:利用群集分析推斷出所關注資料中可能存在的某些特性或現象。
*推論假設的驗證:可以對推論假設作有效性的驗證。
*歸屬預測:將群集分析後的分群結果應用於未知分類之資料記錄上,以預測資料所歸屬的群集。
資料分群(data clustering)或是分群演算法(clustering algorithms)是一種將資料分類成群的方法,其主要的目的乃在於找出資料中較相似的幾個群聚(clusters),並找出各個群聚的代表點,稱為中心點(centroids)或是原型(prototypes)。使用這些中心點來代表原先大量的資料點,就可以達到兩個基本目標:
降低計算量
資料壓縮
一般而言,分群法可以大致歸為兩大類:
階層式分群法(hierarchical clustering):群數(number of clusters)可以由大變小,或是由小變大,來進群聚的合併或分裂,最後再選取最佳的群數。
分割式分群法(partitional clustering):先指定群數後,再用一套疊代的數學運算法,找出最佳的分群方式以及相關的群中心。
所有的分群法都有相似的流程,大略可歸納為下列三點:
收集資料
使用某種方法進行分群
測試分群結果
檢測分群結果,如果未達預期效果,則回到步驟二,再一次進行分群

20090519

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'); //建立資料夾!!!!

就是這樣~~喵~~~

各位看倌不曉得看這麼多廢話後,你有沒有豁然睜大雙眼的感覺!!?

20090428

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就是一個參考的指標與現象,必須瞭解到,一旦鋪貨上架後,如果不是暢銷商品,就必須要等一段時間,才能夠回收,有點像是「撐得越久,領得越多」的 感覺。換句話說,假設今天你想要換工作,你就要考慮採用「80/20」或是「Long Tail」哪一種策略,「80/20」的代表就像是李開復從MS跳槽到Google,短時間內就能取得最大的效益(薪資),而一般人大都採用「Long Tail」策略,因為瞭解自己並不是一項熱賣商品,所以要用略低的薪資來換取業主的青睞,並以時間(年資)來換取金錢。

對於自己來說,當 然得要致力於開發 20% 的價值,現在的社會是專業導向,花 80% 的時間經營自己,在某一項專業領域中,自然能獲得最佳的利潤回饋。彼得杜拉克說,人要學習強化長處,客服缺點,並以持續專心的態度,階段性學習新事物,也 就是集中心力學習一個項目,學會之後再進入下一個項目,這個學習方法,就有點像是「Long Tail」的法則,如果把你自己當作大型通路,能夠上架販賣的東西越多,自然越能得到Long Tail的效果,但先決條件是,你掌握的技術比須都要上得了檯面而不是一知半解的,「樣樣精通樣樣鬆」的產品,絕對沒有市場的。

20090426

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!!!

20090423

來看看你的星座屬於哪種飲料!

請用力點我!!!

牡羊座汽水,既嗆辣又清涼,刺激你從舌尖到心臟。得不得理都不饒人的牡羊,就像一隻焚火的公羊,永遠橫衝直撞。你要知道他語氣尖銳絕對是天生白目,他的心可比汽水般清澈善良。面對愛情和友情的邀約,他寧可選擇吆喝他去打球的朋友。他愛和朋友大聲說話痛快奔跑,可以吃肉喝酒,暢快淋漓的哈拉。因為不善言辭的他,總是容易得罪女孩子纖細的心思。他的自尊和自信像數不完的汽水泡,一但被冒犯就等著他強大的憤怒迎面襲來。說到底他仍是善良的,就算他發了滔天的脾氣,過沒多久他仍是單純的糖水罷了。

20090418

微軟新注音再度搞怪,打字當當當解決方法!

最近好朋友電腦突然不管MSN或平常打字,只要一切入新注音一打就當...

來來來,給大家一個解決方法!!!

首先,在輸入法的地方按右鍵,選擇設定值



再來,請各位找到"新注音"選項,並按下屬性

選擇"詞典",並且取消勾選使用者造詞詞典選項後
再按下"刪除"按鈕(取消勾選後才會浮現)


之後在自動學習的部分點選"設定"
"刪除"個人化調整,並"清除"常用新詞
嘿嘿,大功告成!!!!來,擁抱一下!

你還在幫別人打造舒適圈?

 師不順路,不好為人師,談何容易.... 人總是在為自己的做法找"理由",找一個漂亮的包裝,找一個可以說服人的方式,找一個立足點....然而,這個為自己所做的一切,往往是一個自私的隱性表現,因為你要達到的就是"滿足"自己。 但要如何滿足自己...