2010-07-04 4 views
4

Puisque je n'ai aucune idée de ce que je fais en ce moment, ma formulation peut sembler drôle. Mais sérieusement, j'ai besoin d'apprendre. Le problème auquel je suis confronté est de trouver une méthode (modèle) pour estimer le fonctionnement d'un logiciel: le temps de fonctionnement et l'utilisation maximale de la mémoire. Ce que j'ai déjà sont une grande quantité de données. Cet ensemble de données donne un aperçu de la façon dont un programme fonctionne dans différentes conditions, par ex.Vous cherchez une méthode d'estimation (analyse de données)

<code> 
RUN  Criterion_A Criterion_B Criterion_C Criterion_D Criterion_E <br> 
------------------------------------------------------------------------ 
R0001   12   2   3556   27   9 <br>  
R0002   2   5   2154   22   8 <br> 
R0003   19  12   5556   37   9 <br> 
R0004   10   3   1556    7   9 <br> 
R0005   5   1   556   17   8 <br> 
</code> 

J'ai des milliers de lignes de ces données. Maintenant, j'ai besoin de savoir comment je peux estimer (prévoir) le temps de fonctionnement et l'utilisation maximale de la mémoire si je connais tous les critères à l'avance. Ce dont j'ai besoin, c'est d'une approximation qui donne des indices (limites supérieures, ou gammes).

J'ai le sentiment que c'est un typique ??? problème que je ne connais pas. Pourriez-vous me montrer des indices ou me donner quelques idées (théories, explications, pages web) ou quoi que ce soit d'utile. Merci!

+1

Donc, pour chaque 'RUN', connaissez-vous également l'heure et l'utilisation de la mémoire? – unutbu

+0

oui. Les temps de fonctionnement et l'utilisation de la mémoire sont conservés dans la table. Ils sont des milliers d'entre eux. – user369861

Répondre

2

Si le critère que vous seriez la prévision pour être dans la plage de critères connus, alors vous devriez faire quelques recherches sur le processus Interpolation:

Dans le sous-champ mathématique de l'analyse numérique, l'interpolation est une méthode de construire de nouveaux points de données dans la plage d'un ensemble discret de points de données connus

Si elle se trouve en dehors de votre recherche actuellement connue gamme de données Extrapolation qui est moins précise:

En mathématiques, l'extrapolation est le processus de construction de nouveaux points de données en dehors d'un ensemble discret de points de données connus.

Méthodes

+0

Merci soldat! Tu m'as vraiment aidé pour ça. Les méthodes que vous avez mentionnées sont en effet un peu compliquées que je ne le pensais. Encore une chose, je pense que ce dont j'ai besoin, c'est les deux. Y a-t-il une méthode qui peut faire les deux? – user369861

5

Vous souhaitez un nouveau programme qui prend en entrée un ou plusieurs critères, puis affiche une estimation du temps d'exécution ou de l'utilisation de la mémoire. C'est un problème d'apprentissage automatique.

Vos entrées peuvent être répertoriés comme un vecteur de nombres, comme ceci:

input = [ A, B, C, D, E ] 

L'un des algorithmes les plus simples pour ce serait un K-nearest neighbor algorithm. L'idée sous-jacente est que vous utiliserez votre vecteur d'entrée de nombres et que vous trouverez dans votre base de données le vecteur de nombres le plus proche de votre vecteur d'entrée.Par exemple, étant donné ce vecteur d'entrées:

input = [ 11, 1.8, 3557, 29, 10 ] 

Vous pouvez supposer que le temps d'exécution et de la mémoire devraient être très similaires aux valeurs de cette course (à l'origine dans votre tableau ci-dessus):

R0001   12   2   3556   27   9 

Il existe plusieurs algorithmes pour calculer la similitude entre ces deux vecteurs, un tel algorithme simple et intuitive est le Euclidean distance. À titre d'exemple, la distance euclidienne entre le vecteur d'entrée et le vecteur de la table est la suivante:

dist = sqrt((11-12)^2 + (1.8-2)^2 + (3557-3556)^2 + (27-29)^2 + (9-10)^2) 
dist = 2.6533 

Il devrait être intuitivement évident que les points avec une distance inférieure devraient être meilleures estimations pour temps de fonctionnement et l'utilisation de la mémoire, comme la distance devrait décrire la similarité entre deux ensembles de critères. En supposant que vos critères sont informatifs et bien sélectionnés, les points ayant des critères similaires devraient avoir un temps d'exécution et une utilisation de la mémoire similaires.

Voici quelques exemples de code de la façon de le faire en 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) 

Prendre le temps de fonctionnement et l'utilisation de la mémoire de votre rangée la plus proche est l'algorithme KNN pour K = 1. Cette approche peut être étendue pour inclure des données provenant de plusieurs lignes en prenant une combinaison pondérée de plusieurs lignes de la base de données, avec des lignes avec des distances inférieures à votre vecteur d'entrée contribuant davantage aux estimations. Lisez la page Wikipedia sur KNN pour plus d'informations, en particulier en ce qui concerne la normalisation des données, y compris les contributions de plusieurs points, et les distances de calcul. Lorsque vous calculez la différence entre ces listes de vecteurs d'entrée, vous devriez envisager de normaliser vos données. La raison pour cela est qu'une différence de 1 unité entre 3557 et 3556 pour le critère C peut ne pas être équivalente à une différence de 1 entre 11 et 12 pour le critère A. Si vos données sont normalement distribuées, vous pouvez les convertir toutes en standard scores (or Z-scores) en utilisant cette formule:

N_trans = (N - mean(N))/sdev(N) 

il n'y a pas de solution générale sur la « bonne » pour normaliser les données car il dépend du type et la gamme de données que vous avez, mais Z-scores sont faciles à calculer et un bon méthode à essayer en premier.

Il existe de nombreuses techniques plus sophistiquées pour construire des estimations telles que celle-ci, y compris la régression linéaire, la régression du vecteur de support et la modélisation non linéaire. L'idée derrière certaines des méthodes les plus sophistiquées est que vous essayez de développer une équation qui décrit la relation de vos variables avec le temps ou la mémoire. Par exemple, une application simple pourrait juste avoir un critère et vous pouvez essayer de distinguer entre les modèles tels que:

running_time = s1 * A + s0 
running_time = s2 * A^2 + s1 * A + s0 
running_time = s3 * log(A) + s2 * A^2 + s1 * A + s0 

L'idée est que A est vos critères fixes et sN sont une liste de paramètres libres que vous pouvez tweak jusqu'à ce que vous obteniez un modèle qui fonctionne bien. Un problème avec cette approche est qu'il y a beaucoup de différents modèles possibles qui ont différents nombres de paramètres. La distinction entre les modèles qui ont un nombre différent de paramètres est un problème difficile dans les statistiques, et je ne recommande pas de l'aborder lors de votre première incursion dans l'apprentissage automatique.

Quelques questions que vous devriez vous poser sont les suivantes:

  1. Est-ce que tous mes critères affectent à la fois le temps en cours d'exécution et utilisation de la mémoire? Est-ce que certains affectent seulement l'un ou l'autre et sont inutiles d'un point de vue prédictif? Répondre à cette question est appelé feature selection, et est un problème en suspens dans machine learning.
  2. Avez-vous des estimations a priori de la façon dont vos variables devraient influencer le temps de fonctionnement ou l'utilisation de la mémoire? Par exemple, vous savez peut-être que votre application utilise un algorithme de tri N * log (N) dans le temps, ce qui signifie que vous connaissez explicitement la relation entre un critère et votre temps de fonctionnement.
  3. Vos rangées de critères d'entrée mesurés associées à la durée et à l'utilisation de la mémoire couvrent-elles tous les cas d'utilisation plausibles pour votre application? Si c'est le cas, vos estimations seront meilleures car l'apprentissage automatique peut avoir des difficultés avec des données qui ne lui sont pas familières.
  4. La durée et la mémoire de votre programme dépendent-elles de critères que vous n'indiquez pas dans votre stratégie d'estimation? Par exemple, si vous dépendez d'une ressource externe telle qu'une Web Spider, des problèmes avec votre réseau peuvent influencer le temps d'exécution et l'utilisation de la mémoire d'une manière difficile à prévoir. Si c'est le cas, vos estimations auront beaucoup plus de variance.
+1

James, merci beaucoup! Avant de vous lire attentivement, j'aimerais vous demander s'il existe des méthodes plus simples qui ne font pas un travail parfait mais donnent des réponses raisonnablement raisonnables. J'ai pensé que je pourrais trouver une "formule" qui calcule pour moi (je sais que ce ne sera pas aussi précis). – user369861

+0

J'espère que cela aide! Trouver des formules explicites est difficile! En fait, je pense que les approches du plus proche voisin sont un peu plus simples à comprendre et à mettre en œuvre, et elles sont beaucoup plus robustes aux erreurs dans l'estimation des paramètres. Il y a probablement une bonne formule qui explique vos données, mais la trouver dans le cas général est un problème non trivial. –

Questions connexes