> 백엔드 개발 > 파이썬 튜토리얼 > 다항 회귀를 통해 정확한 예측 잠금 해제

다항 회귀를 통해 정확한 예측 잠금 해제

王林
풀어 주다: 2024-08-12 18:36:32
원래의
732명이 탐색했습니다.

데이터 샘플

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'}
로그인 후 복사

정확한 값을 예측하는 방법은 무엇입니까?

다항 회귀는 두 변수 간의 관계를 모델링하고 예측하는 데 사용할 수 있는 통계 기법입니다. 그러나 이와 같이 여러 변수(학습 시간, 급여, 결근 및 도시)가 관련된 경우 다항 회귀 분석으로는 시계열의 모든 패턴을 포착하는 데 충분하지 않을 수 있습니다.

문제의 문제는 과거에 관찰된 패턴을 기반으로 미래 가치를 예측해야 하는 시계열의 전형적인 예입니다.

이 문제는 머신러닝

으로 해결할 수 있습니다.
  • 변수 간의 모든 관계를 분석
  • 여러 가설을 테스트하여 진행 상황을 파악하는 방법

또한 변수 간의 모든 관계를 분석하고 다양한 가설을 테스트하여 진행 상황을 파악하는 것이 필수적일 수 있습니다. 여기에는 다음이 포함될 수 있습니다.

  • 탐색적 분석: 탐색적 분석 기술을 사용하여 시계열의 특성을 더 잘 이해하고 변수 간의 가능한 패턴이나 관계를 식별합니다.

  • 통계 검정: 변수 간 관찰된 관계에 유의성이 있는지 확인하기 위해 통계 검정을 수행합니다.

또 다른 해결책은 가장 기본적인 가설을 사용하여 이를 수행하는 알고리즘을 만드는 것입니다.

  • 진행에 대한 "관계형 합계"의 영향을 테스트합니다. a+b->c, b+c->a, c+a->b, a+b+c->d 등 (-> == 영향을 미치고 생산함)
  • '관계형 뺄셈', '관계형 나눗셈', '관계형 제곱' 등을 테스트해 보세요.

'관계 연산'을 테스트하기 위한 이 알고리즘은 직접적인 기계 학습(또는 명시적 기계 학습) 접근 방식입니다. 이는 알고리즘이 고급 기계 학습 기술을 사용하지 않고 규칙과 논리 구조를 구현하여 시계열 패턴을 학습한다는 것을 의미합니다.

기본 가설만 테스트하면 다음과 같은 제한 사항이 발생합니다.

  • 과적합: 알고리즘은 학습된 데이터 세트의 특정 패턴을 과도하게 전문화할 수 있으며 새 데이터에 대해서는 잘 일반화되지 않을 수 있습니다.
  • 제한된 확장성: 데이터 세트가 매우 크거나 복잡한 경우 알고리즘이 가능한 모든 가설을 실시간으로 테스트하지 못할 수도 있습니다.

머신러닝 모델은 다음을 수행할 수 있습니다.

  • 명시적으로 지정할 필요 없이 복잡한 패턴을 학습하고 새 데이터로 일반화합니다.

하지만 표본 크기는 어떻습니까?

더 복잡한 솔루션을 찾기 전에 더 간단한 솔루션이 적절하게 테스트되었는지 확인하는 것이 가장 좋습니다.

진행 수열에 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'}
]
로그인 후 복사

지금

  • 공부시간 = 13 => 예상 연봉: 19550
  • 공부시간 = 49 => 예상 연봉: 77150

따라서 이 문제는 데이터 샘플이 충분하다면 다항식 회귀로 해결될 수 있습니다

Unlocking Accurate Predictions with Polynomial Regression

정확한 예측을 위해서는 모델이 최대 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿