您需要一個新的程序,它將輸入一個或多個標準作爲輸入,然後輸出運行時間或內存使用情況的估計值。這是一個機器學習問題。
你的輸入可以被列爲數的向量,如下:
input = [ A, B, C, D, E ]
其中一個最簡單的算法,這將是一個K-nearest neighbor algorithm。這背後的想法是,你將採取你的輸入數字向量,並在數據庫中找到最接近你的輸入向量的數字向量。例如,給定的輸入這個載體:
input = [ 11, 1.8, 3557, 29, 10 ]
您可以假設運行時間和內存應該從這個運行非常相似的值(最初在你上面列表):
R0001 12 2 3556 27 9
有幾種計算這兩個向量之間相似度的算法,一種簡單而直觀的算法是Euclidean distance。作爲一個例子,輸入矢量和從表中的向量之間的歐幾里得距離是這樣的:
dist = sqrt((11-12)^2 + (1.8-2)^2 + (3557-3556)^2 + (27-29)^2 + (9-10)^2)
dist = 2.6533
應當直觀清楚的是具有較低距離點應該是用於運行時間和內存使用更好的估計,因爲距離應該描述兩套標準之間的相似性。假設您的標準信息豐富且選擇得當,具有類似標準的點應具有類似的運行時間和內存使用情況。
下面是如何做到這一點R中的一些示例代碼:
r1 = c(11,1.8,3557,29,10)
r2 = c(12,2.0,3556,27, 9)
print(r1)
print(r2)
dist_r1_r2 = sqrt((11-12)^2 + (1.8-2)^2 + (3557-3556)^2 + (27-29)^2 + (9-10)^2)
print(dist_r1_r2)
smarter_dist_r1_r2 = sqrt(sum((r1 - r2)^2))
print(smarter_dist_r1_r2)
以運行時間和您最近行的內存使用量的KNN算法爲K = 1。通過對數據庫中的多行進行加權組合,可以將此方法擴展爲包含來自多行的數據,而距離輸入向量較近的行對估計做出的貢獻更大。閱讀KNN上的維基百科頁面以獲取更多信息,特別是關於數據規範化的內容,包括多點貢獻和計算距離。
當計算這些輸入向量列表之間的差異時,應考慮規範化數據。這樣做的基本原理是,對於標準C,3557和3556之間的1個單位的差異可能不等於標準A的11和12之間的1的差異。如果您的數據是正態分佈的,則可以將它們全部轉換爲standard scores (or Z-scores)使用這個公式:
N_trans = (N - mean(N))/sdev(N)
上有「正確」的方式,因爲它取決於你的數據的類型和範圍,以標準化的數據沒有通用的解決方案,但Z值很容易計算和良好方法先嚐試。
有很多更復雜的技術來構建這樣的估計,包括線性迴歸,支持向量迴歸和非線性建模。一些更復雜的方法背後的想法是,你試着開發一個方程來描述你的變量與運行時間或內存的關係。例如,一個簡單的應用程序可能只是一個標準,你可以嘗試和模式,比如區分:
running_time = s1 * A + s0
running_time = s2 * A^2 + s1 * A + s0
running_time = s3 * log(A) + s2 * A^2 + s1 * A + s0
的想法是,一個是你的固定標準,和Sn的自由參數列表,你可以調整,直到你得到一個運作良好的模型。
這種方法的一個問題是,有許多不同的可能的模型具有不同數量的參數。區分具有不同參數數量的模型是統計學中的一個難題,我不建議在您首次嘗試機器學習時對其進行處理。
,你應該問自己一些問題是:
- 做了我所有的標準,同時影響運行時間和內存使用情況?做一些隻影響一個或另一個,並從預測的角度來看有些沒用?回答這個問題被稱爲feature selection,並且是machine learning中的一個突出問題。
- 你有任何先驗估計你的變量應該如何影響運行時間或內存使用情況?例如,您可能知道您的應用程序使用了N * log(N)的排序算法,這意味着您明確知道一個標準與您的運行時間之間的關係。
- 您的行測量輸入條件與運行時間和內存使用情況配對是否涵蓋您的應用程序的所有合理用例?如果是這樣,那麼你的估計會好得多,因爲機器學習對於不熟悉的數據可能會遇到困難。
- 程序的運行時間和內存是否取決於您未輸入到估算策略中的標準?例如,如果您依賴於外部資源(如Web Spider),則網絡問題可能會以難以預測的方式影響運行時間和內存使用情況。如果是這樣,你的估計會有更多的差異。
因此,對於每個「RUN」,您是否也知道時間和內存使用情況? – unutbu 2010-07-05 00:03:06
是的。運行時間和內存使用情況保存在表格中。他們是成千上萬的人。 – user369861 2010-07-05 00:35:48