머신러닝은 부동산을 포함한 다양한 산업을 변화시키고 있습니다. 일반적인 작업 중 하나는 침실 수, 욕실 수, 면적, 위치 등 다양한 특성을 기반으로 주택 가격을 예측하는 것입니다. 이 기사에서는 scikit-learn을 사용하여 주택 가격을 예측하는 기계 학습 모델을 구축하는 방법을 살펴보고 데이터 전처리부터 모델 배포까지 모든 측면을 다룹니다.
Scikit-learn은 Python의 기계 학습에 가장 널리 사용되는 라이브러리 중 하나입니다. 데이터 분석 및 모델링을 위한 간단하고 효율적인 도구를 제공합니다. 분류, 회귀, 클러스터링 또는 차원 축소를 처리하는 경우 scikit-learn은 강력한 기계 학습 모델을 구축하는 데 도움이 되는 광범위한 유틸리티 세트를 제공합니다.
이 가이드에서는 scikit-learn을 사용하여 주택 가격을 예측하는 회귀 모델을 구축하겠습니다. 프로세스의 각 단계를 살펴보겠습니다.
당면 과제는 다음과 같은 특성을 기반으로 주택 가격을 예측하는 것입니다.
이것은 대상 변수(주택 가격)가 연속적이어서 회귀 작업이 되는 지도 학습 문제입니다. Scikit-learn은 이 프로젝트에서 사용할 선형 회귀 및 Random Forest와 같은 다양한 회귀 알고리즘을 제공합니다.
Kaggle 주택 가격 데이터 세트와 같은 실제 데이터 세트를 사용하거나 공개 API에서 자체 데이터를 수집할 수 있습니다.
다음은 데이터가 어떻게 보일지에 대한 샘플입니다.
침실 | 욕실 | 면적(평방피트) | 위치 | 가격($) |
---|---|---|---|---|
3 | 2 | 1500 | 보스턴 | 300,000 |
4 | 3 | 2000 | 시애틀 | 500,000 |
여기서 대상 변수는 가격입니다.
머신러닝 모델에 데이터를 공급하기 전에 사전 처리가 필요합니다. 여기에는 누락된 값 처리, 범주형 특성 인코딩, 데이터 크기 조정이 포함됩니다.
실제 데이터세트에서는 데이터 누락이 흔히 발생합니다. 중앙값과 같은 통계 측정값으로 누락된 값을 채우거나 누락된 데이터가 있는 행을 삭제할 수 있습니다.
data.fillna(data.median(), inplace=True)
머신러닝 모델에는 숫자 입력이 필요하므로 위치와 같은 범주형 특성을 숫자로 변환해야 합니다. 라벨 인코딩은 각 카테고리에 고유 번호를 할당합니다.
from sklearn.preprocessing import LabelEncoder encoder = LabelEncoder() data['Location'] = encoder.fit_transform(data['Location'])
면적 및 가격과 같은 특성의 크기를 조정하여 동일한 크기를 유지하는 것이 중요합니다. 특히 특성 크기에 민감한 알고리즘의 경우 더욱 그렇습니다. 스케일링을 적용하는 방법은 다음과 같습니다.
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_scaled = scaler.fit_transform(X)
모든 기능이 대상 변수에 동일하게 기여하는 것은 아닙니다. 특징 선택은 가장 중요한 특징을 식별하는 데 도움이 되어 모델 성능을 향상시키고 과적합을 줄입니다.
이 프로젝트에서는 SelectKBest를 사용하여 대상 변수와의 상관 관계를 기반으로 상위 5개 기능을 선택합니다.
from sklearn.feature_selection import SelectKBest, f_regression selector = SelectKBest(score_func=f_regression, k=5) X_new = selector.fit_transform(X, y)
이제 데이터를 사전 처리하고 최상의 기능을 선택했으므로 모델을 학습할 차례입니다. 우리는 두 가지 회귀 알고리즘을 사용합니다: 선형 회귀 및 Random Forest.
선형 회귀는 데이터를 직선으로 연결하여 예측 값과 실제 값 간의 차이를 최소화합니다.
from sklearn.linear_model import LinearRegression linear_model = LinearRegression() linear_model.fit(X_train, y_train)
랜덤 포레스트(Random Forest)는 여러 의사결정 트리를 사용하고 그 결과를 평균화하여 정확도를 높이고 과적합을 줄이는 앙상블 방법입니다.
from sklearn.ensemble import RandomForestRegressor forest_model = RandomForestRegressor(n_estimators=100) forest_model.fit(X_train, y_train)
모델이 얼마나 잘 일반화되는지 평가하기 위해 데이터를 학습 세트와 테스트 세트로 분할합니다.
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X_new, y, test_size=0.2, random_state=42)
모델을 훈련한 후 평균 제곱 오차(MSE) 및 R 제곱(R²)
과 같은 측정항목을 사용하여 모델 성능을 평가해야 합니다.MSE는 예측 값과 실제 값 간의 평균 제곱 차이를 계산합니다. MSE가 낮을수록 성능이 향상됩니다.
from sklearn.metrics import mean_squared_error mse = mean_squared_error(y_test, y_pred)
R²는 모델이 목표 변수의 분산을 얼마나 잘 설명하는지 알려줍니다. 값이 1이면 완벽한 예측을 의미합니다.
from sklearn.metrics import r2_score r2 = r2_score(y_test, y_pred)
이러한 측정항목을 사용하여 선형 회귀 및 랜덤 포레스트 모델의 성능을 비교합니다.
모델 성능을 더욱 향상시키기 위해 하이퍼파라미터를 미세 조정할 수 있습니다. Random Forest의 경우 n_estimators(트리 수) 및 max_length(트리의 최대 깊이)와 같은 하이퍼 매개변수가 성능에 큰 영향을 미칠 수 있습니다.
초매개변수 최적화를 위해 GridSearchCV를 사용하는 방법은 다음과 같습니다.
from sklearn.model_selection import GridSearchCV param_grid = { 'n_estimators': [50, 100, 200], 'max_depth': [None, 10, 20] } grid_search = GridSearchCV(RandomForestRegressor(), param_grid, cv=5) grid_search.fit(X_train, y_train) best_model = grid_search.best_estimator_
모델을 훈련하고 조정한 후 다음 단계는 배포입니다. Flask를 사용하여 예측을 제공하는 간단한 웹 애플리케이션을 만들 수 있습니다.
다음은 주택 가격 예측을 제공하는 기본 Flask 앱입니다.
from flask import Flask, request, jsonify import joblib app = Flask(__name__) # Load the trained model model = joblib.load('best_model.pkl') @app.route('/predict', methods=['POST']) def predict(): data = request.json prediction = model.predict([data['features']]) return jsonify({'predicted_price': prediction[0]}) if __name__ == '__main__': app.run()
joblib:
를 사용하여 훈련된 모델을 저장합니다.
import joblib joblib.dump(best_model, 'best_model.pkl')
이렇게 하면 API에 요청을 보내 예측을 할 수 있습니다.
이 프로젝트에서는 주택 가격을 예측하기 위해 scikit-learn을 사용하여 머신러닝 모델을 구축하는 전체 프로세스를 탐색했습니다. 데이터 전처리 및 기능 선택부터 모델 학습, 평가, 배포까지 각 단계를 실제 코드 예제로 다루었습니다.
머신러닝을 처음 접하는 사람이든 실제 프로젝트에 scikit-learn을 적용하려는 사람이든 이 가이드는 다양한 회귀 작업에 적응할 수 있는 포괄적인 워크플로를 제공합니다.
모델의 성능과 정확성을 향상시키기 위해 다양한 모델, 데이터세트, 기술을 자유롭게 실험해 보세요.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3