Maison > Article > développement back-end > Débloquer des prédictions précises avec la régression polynomiale
date = [ { "study_time": 1, "salary": 350, "absences": 5, "city": "San Francisco" }, { "study_time": 2, "salary": 1600, "absences": 4, "city": "London" }, { "study_time": 3, "salary": 2450, "absences": 3, "city": "Paris" }, { "study_time": 4, "salary": 5150, "absences": 5, "city": "San Francisco" }, { "study_time": 5, "salary": 5800, "absences": 4, "city": "London" }, { "study_time": 6, "salary": 6050, "absences": 3, "city": "Paris" } ]
{ "study_time": 13, "salary": ???, "absences": 5, "city": "San Francisco" }
En utilisant la Régression polynomiale la valeur 13 de cette séquence serait : 24814
Mais la valeur correcte était : 19550
Erreur : 5264
Si je devais prédire la position 49 ce serait : 182441
Mais la valeur correcte était : 77150
Erreur : 105291
C'était "algorithme caché" qui produit la progression :
x = 0 absences_base = 50 salary_base = 1000 data = [] for i in range(50): if x == 0: x += 1 data.append({ "study_time": i + 1, "salary": (i * salary_base + (300 * 2 * (i + 1))) - (5 * absences_base), "absences": 5, "city": "San Francisco" }) elif x == 1: x += 1 data.append({ "study_time": i + 1, "salary": (i * salary_base + (200 * 2 * (i + 1))) - (4 * absences_base), "absences": 4, "city": "London" }) else: x = 0 data.append({ "study_time": i + 1, "salary": (i * salary_base + (100 * 2 * (i + 1))) - (3 * absences_base), "absences": 3, "city": "Paris" }) for entry in data: print(entry)
{'study_time': 1, 'salary': 350, 'absences': 5, 'city': 'San Francisco'} {'study_time': 2, 'salary': 1600, 'absences': 4, 'city': 'London'} {'study_time': 3, 'salary': 2450, 'absences': 3, 'city': 'Paris'} {'study_time': 4, 'salary': 5150, 'absences': 5, 'city': 'San Francisco'} {'study_time': 5, 'salary': 5800, 'absences': 4, 'city': 'London'} {'study_time': 6, 'salary': 6050, 'absences': 3, 'city': 'Paris'} {'study_time': 7, 'salary': 9950, 'absences': 5, 'city': 'San Francisco'} {'study_time': 8, 'salary': 10000, 'absences': 4, 'city': 'London'} {'study_time': 9, 'salary': 9650, 'absences': 3, 'city': 'Paris'} {'study_time': 10, 'salary': 14750, 'absences': 5, 'city': 'San Francisco'} {'study_time': 11, 'salary': 14200, 'absences': 4, 'city': 'London'} {'study_time': 12, 'salary': 13250, 'absences': 3, 'city': 'Paris'} {'study_time': 13, 'salary': 19550, 'absences': 5, 'city': 'San Francisco'}
La régression polynomiale est une technique statistique qui peut être utilisée pour modéliser et prédire la relation entre deux variables. Cependant, dans des cas comme celui-ci, où plusieurs variables sont impliquées (durée des études, salaire, absences et ville), la régression polynomiale peut ne pas être suffisante pour capturer tous les modèles de la série chronologique.
Le problème en question est un exemple classique de série chronologique, où nous devons prédire les valeurs futures en fonction de modèles observés dans le passé.
Ce problème pourrait être résolu grâce à l'apprentissage automatique
De plus, il peut être essentiel d'analyser toutes les relations entre les variables et de tester diverses hypothèses pour découvrir ce qui produit la progression. Cela peut inclure :
Analyse exploratoire : utilisez des techniques d'analyse exploratoire pour mieux comprendre la nature de la série chronologique et identifier des modèles ou des relations possibles entre les variables.
Tests statistiques : Effectuer des tests statistiques pour vérifier s'il y a une signification dans les relations observées entre les variables.
Une autre solution serait de créer un algorithme qui fasse cela avec les hypothèses les plus élémentaires :
Cet algorithme de test des "opérations relationnelles", ce serait une approche de machine learning direct (ou explicite machine learning). Cela signifie que l'algorithme n'utilise pas de techniques avancées d'apprentissage automatique, mais implémente plutôt des règles et des structures logiques pour apprendre des modèles de séries chronologiques.
Et en testant uniquement des hypothèses de base, les limites seraient :
Alors qu'un modèle d'apprentissage automatique peut :
Avant de rechercher des solutions plus complexes, il est préférable de s'assurer qu'une solution plus simple a été correctement testée.
Si nous incluons seulement 3 lignes supplémentaires de la séquence de progression, nous pouvons prédire la valeur exacte en utilisant la progression polynomiale
date = [ { "study_time": 1, "salary": 350, "absences": 5, "city": "San Francisco" }, { "study_time": 2, "salary": 1600, "absences": 4, "city": "London" }, { "study_time": 3, "salary": 2450, "absences": 3, "city": "Paris" }, { "study_time": 4, "salary": 5150, "absences": 5, "city": "San Francisco" }, { "study_time": 5, "salary": 5800, "absences": 4, "city": "London" }, { "study_time": 6, "salary": 6050, "absences": 3, "city": "Paris" }, {'study_time': 7, 'salary': 9950, 'absences': 5, 'city': 'San Francisco'}, {'study_time': 8, 'salary': 10000, 'absences': 4, 'city': 'London'}, {'study_time': 9, 'salary': 9650, 'absences': 3, 'city': 'Paris'} ]
Ce problème peut donc être résolu avec la régression polynomiale, tant que l'échantillon de données est suffisant
Il est intéressant de noter que le modèle n'a besoin que d'un échantillon de données jusqu'à la ligne 9 pour faire des prédictions précises. Cela suggère qu'il existe un modèle régulier dans la série chronologique qui peut être capturé avec une quantité limitée de données. Et il y en avait vraiment.
import pandas as pd import matplotlib.pyplot as plt from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression data = pd.DataFrame({ "study_time": [1, 2, 3, 4, 5, 6, 7, 8, 9], "absences": [5, 4, 3, 5, 4, 3, 5, 4, 3], "San Francisco": [0, 1, 0, 0, 1, 0, 0, 1, 0], # dummy variables "London": [0, 0, 1, 0, 0, 1, 0, 0, 1], # dummy variables "Paris": [1, 0, 0, 1, 0, 0, 1, 0, 0], # dummy variables "salary": [350, 1600, 2450, 5150, 5800, 6050, 9950, 10000, 9650] }) # Independent and dependent variables X = data[["study_time", "absences", "San Francisco", "London", "Paris"]] y = data["salary"] # Creating polynomial characteristics of degree 2 characteristics_2 = PolynomialFeatures(degree=2) x_pol_2 = characteristics_2.fit_transform(X) y_pol_2 = model2.predict(x_pol_2) # Fitting the linear regression model model2 = LinearRegression() model2.fit(x_pol_2, y) # New data provided for prediction new_data = pd.DataFrame({ "study_time": [13], "absences": [5], "San Francisco": [0], "London": [0], "Paris": [1] }) # Polynomial transformation of the new data new_data_pol_2 = characteristics_2.transform(new_data) predicted_salary = model2.predict(new_data_pol_2) print("Predicted Salary:", int(predicted_salary[0]) ) # Plot plt.subplot(1, 1, 1) plt.scatter(new_data["study_time"], predicted_salary, color='green', label='Predicted Salary') plt.scatter(data["study_time"], y, color='blue', label='Real Salary') plt.scatter(data["study_time"], y_pol_2, color='red', label='Polynomial Fit', marker='x') plt.title("Polynomial Regression - Salary and Study Time") plt.xlabel("Study Time") plt.ylabel("Salary") plt.legend() plt.show()
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!