Präzise Vorhersagen mit polynomialer Regression ermöglichen

王林
Freigeben: 2024-08-12 18:36:32
Original
709 Leute haben es durchsucht

Datenbeispiel

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" }
]
Nach dem Login kopieren

Wie hoch ist das geschätzte Gehalt mit diesen Werten?

{ "study_time": 13, "salary": ???, "absences": 5, "city": "San Francisco" }
Nach dem Login kopieren

Ergebnisse

Unter Verwendung der Polynomialen Regression wäre der Wert 13 dieser Sequenz: 24814
Der korrekte Wert war jedoch: 19550
Fehler: 5264

Wenn ich Position 49 vorhersagen würde, wäre es: 182441
Der korrekte Wert war jedoch: 77150
Fehler: 105291

Dies war der „versteckte Algorithmus“, der die Progression erzeugt:

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)
Nach dem Login kopieren
{'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'}
Nach dem Login kopieren

Wie lässt sich der genaue Wert vorhersagen?

Polynomielle Regression ist eine statistische Technik, mit der die Beziehung zwischen zwei Variablen modelliert und vorhergesagt werden kann. In solchen Fällen, in denen mehrere Variablen beteiligt sind (Studienzeit, Gehalt, Abwesenheiten und Stadt), reicht die polynomielle Regression jedoch möglicherweise nicht aus, um alle Muster in der Zeitreihe zu erfassen.

Das fragliche Problem ist ein klassisches Beispiel für Zeitreihen, bei dem wir zukünftige Werte basierend auf in der Vergangenheit beobachteten Mustern vorhersagen müssen.

Dieses Problem könnte mit maschinellem Lernen

gelöst werden
  • Analysieren Sie alle Beziehungen zwischen Variablen
  • Testen Sie mehrere Hypothesen, um herauszufinden, was die Progression hervorruft

Darüber hinaus kann es wichtig sein, alle Beziehungen zwischen Variablen zu analysieren und verschiedene Hypothesen zu testen, um herauszufinden, was die Progression hervorruft. Dazu kann Folgendes gehören:

  • Explorative Analyse: Verwenden Sie explorative Analysetechniken, um die Natur der Zeitreihe besser zu verstehen und mögliche Muster oder Beziehungen zwischen Variablen zu identifizieren.

  • Statistische Tests: Führen Sie statistische Tests durch, um zu überprüfen, ob die zwischen den Variablen beobachteten Beziehungen signifikant sind.

Eine andere Lösung wäre, einen Algorithmus zu erstellen, der dies mit den grundlegendsten Hypothesen tut:

  • Testen Sie den Einfluss von „relationalen Summen“ auf den Verlauf: a+b->c, b+c->a, c+a->b, a+b+c->d usw. (-> == beeinflusst, erzeugt)
  • Testen Sie „relationale Subtraktionen“, „relationale Divisionen“, „relationale Quadrate“ usw.

Bei diesem Algorithmus zum Testen „relationaler Operationen“ handelt es sich um einen Ansatz für direktes maschinelles Lernen (oder explizites maschinelles Lernen). Das bedeutet, dass der Algorithmus keine fortgeschrittenen Techniken des maschinellen Lernens verwendet, sondern Regeln und logische Strukturen implementiert, um Zeitreihenmuster zu lernen.

Und wenn man nur grundlegende Hypothesen testet, ergeben sich folgende Einschränkungen:

  • Überanpassung: Der Algorithmus ist möglicherweise zu stark auf bestimmte Muster im trainierten Datensatz spezialisiert und lässt sich nicht gut auf neue Daten verallgemeinern.
  • Eingeschränkte Skalierbarkeit: Wenn der Datensatz sehr groß oder komplex ist, kann der Algorithmus möglicherweise nicht alle möglichen Hypothesen in Echtzeit testen.

Während ein Modell für maschinelles Lernen Folgendes kann:

  • Erlernen Sie komplexe Muster und verallgemeinern Sie sie auf neue Daten, ohne dass diese explizit spezifiziert werden müssen.

Aber wie sieht es mit der Stichprobengröße aus?

Bevor Sie nach komplexeren Lösungen suchen, stellen Sie am besten sicher, dass eine einfachere Lösung ausreichend getestet wurde.

Wenn wir nur drei weitere Zeilen der Progressionssequenz einbeziehen, können wir den genauen Wert mithilfe der Polynomprogression vorhersagen

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'}
]
Nach dem Login kopieren

Jetzt

  • study_time = 13 => Voraussichtliches Gehalt: 19550
  • study_time = 49 => Voraussichtliches Gehalt: 77150

Dieses Problem kann also mit polynomialer Regression gelöst werden, solange die Datenstichprobe ausreichend ist

Unlocking Accurate Predictions with Polynomial Regression

Es ist interessant festzustellen, dass das Modell nur eine Stichprobe der Daten bis Zeile 9 benötigt, um genaue Vorhersagen zu treffen. Dies deutet darauf hin, dass es in der Zeitreihe ein regelmäßiges Muster gibt, das mit einer begrenzten Datenmenge erfasst werden kann. Und das gab es wirklich.

Vollständiger Code

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()

Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonPräzise Vorhersagen mit polynomialer Regression ermöglichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!