2017-10-08 36 views
1

J'ai 2 tableaux: le premier tableau contient des zones d'appartements et le second ses prix. Les valeurs des tableaux forment un graphique et seront utilisées pour calculer les résultats d'une fonction de coût. La tâche principale est de trouver le meilleur paramètre de la fonction de coût pour minimiser son résultat. Voici comment la fonction de coût ressemble:La meilleure façon de trouver un taux pour une fonction de coût

Il a été suggéré de créer une boucle de 1 à 10 000 et trouver le meilleur paramètre qui a moins de résultat. La complexité de cet algorithme est de 10 000 * la taille des tableaux.

J'ai proposé une idée pour calculer les différences entre les éléments correspondants des tableaux et mettre les résultats dans un tableau. Ensuite, trouvez une moyenne de tous les éléments de ce tableau. La valeur moyenne obtenue est le paramètre qui devrait fournir un meilleur résultat pour notre fonction de coût. L'algorithme est beaucoup plus efficace que le précédent et peut fournir des résultats plus précis.

Je me demande si mon algorithme est applicable ou pas?

+1

Pouvez-vous nous expliquer en quoi consiste cette fonction de coût? Je ne suis pas sûr de suivre ce que vous dites. – templatetypedef

+0

Malheureusement, l'uploader d'images de stackoverflow ne fonctionne pas ...J'ai réussi seulement à fournir un lien: http://imageshack.com/a/img924/3743/b2v2LZ.png. Dans cette fonction: m - la longueur d'un tableau; x (i) - élément i du premier tableau; y (i) - élément i du deuxième tableau; a - le paramètre que j'ai besoin de calculer; –

+0

Qu'est-ce que Theta_0 et Theta_1 ici? – templatetypedef

Répondre

1

La fonction de coût que vous proposez est l'erreur quadratique moyenne de l'ajustement d'une fonction linéaire à une collection de points de données. C'est un problème bien étudié, et en fait, il existe une solution fermée qui vous dira la valeur mathématiquement optimale d'un que vous devriez choisir. En ce sens, je recommande de ne pas utiliser soit des solutions qui sont proposées ici et de résoudre simplement les choses directement. La fonction de coût que vous avez est une fonction purement de la variable a, donc prendre la dérivée par rapport à a, mettre cette dérivée à zéro, et résoudre devrait vous donner le choix optimal de a.

Coût (a) = (1/2m) Σ i = 0 (ax i - y i)

coût '(a) = (1/2m) Σ i = 0 2 (ax i - y i) x i

coût '(a) = (1/2m) Σ i = 0 (2ax i - 2x i y i)

La définition de cette expression à 0 et la simplification nous dit que

0 = (1/2 m) Σ i = 0 (2ax i - 2x i y i)

0 = Σ i = 0 (2ax i - 2x i y i)

0 = 2a Σ i = 0 x i -2 Σ i = 0 x i y i

un Σ i = 0 x i = Σ i = 0 x i y i

a = (Σ i = 0 x i y i)/(Σ i = 0 x i)

Vous devriez pouvoir calculer ce assez facilement dans le temps O (n) en faisant un passez en un seul passage sur le tableau et calculez le numérateur et le dénominateur.

+0

Êtes-vous sûr que vous avez dérivé droit? Je pense devrait être comme Coût »(a) = (1/2m) Σi = 0 2 (ax-y) (http://www.wolframalpha.com/input/?i=(xy)%5E2) –

+0

Est ma 2ème solution est fausse? –

+0

@DenisEvseev Non, cela ne fonctionnera pas nécessairement. Pensez-y de cette façon - vous cherchez un facteur d'échelle pour augmenter l'ensemble du premier tableau par. La soustraction des éléments du premier et du second tableau par paires vous indique très peu de choses sur le facteur d'échelle dont vous avez besoin. Imaginez que les x sont mesurés en trillions et que les y sont en un seul chiffre. Les différences seront stupéfiantes, mais la que vous voulez est minuscule dans ce cas. – templatetypedef