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" }
多項式回帰を使用すると、このシーケンスの値 13 は次のようになります: 24814
しかし、正しい値は 19550
でした。
エラー: 5264
位置 49 を予測すると、次のようになります: 182441
しかし、正しい値は 77150
でした。
エラー: 105291
これは、進行を生成する「隠されたアルゴリズム」でした:
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'}
多項式回帰は、2 つの変数間の関係をモデル化し、予測するために使用できる統計手法です。ただし、このような場合、複数の変数 (学習時間、給与、欠勤、都市) が関係しているため、多項式回帰では時系列のすべてのパターンを捉えるのに十分ではない可能性があります。
問題となっている問題は、時系列の典型的な例であり、過去に観察されたパターンに基づいて将来の値を予測する必要があります。
この問題は機械学習
で解決できる可能性がありますさらに、変数間のすべての関係を分析し、さまざまな仮説をテストして、何が進行を生み出すのかを発見することが不可欠な場合があります。これには以下が含まれる場合があります:
探索的分析: 探索的分析手法を使用して、時系列の性質をより深く理解し、変数間の考えられるパターンや関係を特定します。
統計的テスト: 統計的テストを実行して、変数間に観察される関係に有意性があるかどうかを確認します。
もう 1 つの解決策は、最も基本的な仮説を使用してこれを行うアルゴリズムを作成することです。
「リレーショナル操作」をテストするためのこのアルゴリズムは、直接機械学習 (または明示的機械学習) アプローチになります。これは、アルゴリズムが高度な機械学習技術を使用するのではなく、時系列パターンを学習するためのルールと論理構造を実装することを意味します。
そして、基本的な仮説のみをテストすると、次のような制限が生じます:
機械学習モデルでは次のことが可能です。
より複雑なソリューションを探す前に、より単純なソリューションが適切にテストされていることを確認することが最善です。
数列シーケンスをあと 3 行だけ含めると、多項式数列を使用して正確な値を予測できます
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'} ]
データサンプルが十分である限り、この問題は多項式回帰で解決できます
正確な予測を行うためにモデルが必要とするのは行 9 までのデータのサンプルだけであることに注目するのは興味深いことです。これは、限られた量のデータでキャプチャできる時系列に規則的なパターンが存在することを示唆しています。そして本当にありました。
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()
以上が多項式回帰で正確な予測を可能にするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。