Rumah > Artikel > pembangunan bahagian belakang > Membuka Kunci Ramalan Tepat dengan Regresi Polinomial
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" }
Menggunakan Regression Polinomial nilai 13 jujukan ini ialah: 24814
Tetapi nilai yang betul ialah: 19550
Ralat: 5264
Jika saya meramalkan kedudukan 49 ia akan menjadi: 182441
Tetapi nilai yang betul ialah: 77150
Ralat: 105291
Ini ialah "algoritma tersembunyi" yang menghasilkan janjang:
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'}
Regression polinomial ialah teknik statistik yang boleh digunakan untuk memodelkan dan meramalkan hubungan antara dua pembolehubah. Walau bagaimanapun, dalam kes seperti ini, di mana terdapat beberapa pembolehubah yang terlibat (masa belajar, gaji, ketidakhadiran dan bandar), regresi polinomial mungkin tidak mencukupi untuk menangkap semua corak dalam siri masa.
Masalah yang dimaksudkan ialah contoh klasik siri masa, di mana kita perlu meramalkan nilai masa hadapan berdasarkan corak yang diperhatikan pada masa lalu.
Masalah ini boleh diselesaikan dengan pembelajaran mesin
Selain itu, adalah penting untuk menganalisis semua hubungan antara pembolehubah dan menguji pelbagai hipotesis untuk mengetahui perkara yang menghasilkan perkembangan. Ini mungkin termasuk:
Analisis penerokaan: Gunakan teknik analisis penerokaan untuk lebih memahami sifat siri masa dan mengenal pasti corak atau hubungan yang mungkin antara pembolehubah.
Ujian statistik: Jalankan ujian statistik untuk menyemak sama ada terdapat kepentingan dalam hubungan yang diperhatikan antara pembolehubah.
Penyelesaian lain ialah mencipta algoritma yang melakukan ini dengan hipotesis paling asas:
Algoritma ini untuk menguji "operasi perhubungan", ia akan menjadi pendekatan pembelajaran mesin langsung (atau pembelajaran mesin eksplisit). Ini bermakna algoritma tidak menggunakan teknik pembelajaran mesin lanjutan, sebaliknya melaksanakan peraturan dan struktur logik untuk mempelajari corak siri masa.
Dan dengan menguji hipotesis asas sahaja, hadnya ialah:
Walaupun model pembelajaran mesin boleh:
Sebelum mencari penyelesaian yang lebih kompleks, sebaiknya pastikan penyelesaian yang lebih mudah telah diuji secukupnya.
Jika kita memasukkan hanya 3 lagi baris jujukan janjang, kita boleh meramalkan nilai tepat menggunakan janjang polinomial
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'} ]
Jadi masalah ini boleh diselesaikan dengan regresi polinomial, asalkan sampel data mencukupi
Adalah menarik untuk diperhatikan bahawa model hanya memerlukan sampel data sehingga baris 9 untuk membuat ramalan yang tepat. Ini menunjukkan bahawa terdapat corak biasa dalam siri masa yang boleh ditangkap dengan jumlah data yang terhad. Dan memang ada.
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()
Atas ialah kandungan terperinci Membuka Kunci Ramalan Tepat dengan Regresi Polinomial. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!