ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [선형회귀분석+ 산점도/선형회귀그래프] 환경에따른주택가격예측하기
    DataAnalysis/모델 분석 2022. 6. 1. 01:01

    <개념 설명>

     

    1. 회귀분석: 입력 데이터를 기반으로 결과를 예측하는 것

    2. 머신러닝

    -1959년 아서 사무엘:  ‘컴퓨터에 명시적인 프로그램 없이 스스로 학습 할 수 있는 능력을 부여하는 연구분야’로정의

    –인간이 지식과 경험을 학습하는 방법을 용하여 컴퓨터에 입력된 데이터에서 스스로 패턴을 찾아 학습하여 새로운 지식을만들고 예측하는 통찰을 제공하는 AI의 한 분야

    3. 머신러닝 프로세스

    –데이터수집→ 데이터 전처리 및 훈련/테스트 데이터 분할→ 모델구축및학습→ 모델평가→ 예측

    4. 지도 학습

    -학습을 하기 위한 훈련 데이터에 입력과 출력을 같이 제공

    -문제에 대한 답을 아는 상태에서 학습하느 방식

    -입력: 예측 변수, 속성,특징

    -출력: 반응 변수, 목표 변수,클래스,레이블

    5.사이킷런

    -마지막 컬럼 종속 변수 Y, 데이터셋 객체의 target배열로 관리

    -전체 n개의 컬럼 중 아으로 (n-1)개의 컬럼은 독립 변수 x

    6. 분석 평가 지표

    -회귀 분석 결과에 대한 평가지표: 예측값과 실제값의 차이인 오류의 크기

     

    <프로젝트>

    프로젝트 설명: 보스턴 주택 가격 데이터에 머신러닝 기반의 회귀 분석을 수행하여 주택 가격에 영향을 미치는 변수를 확인하고 그 값에 따른 주택 가격을 예측하는 것 

    -주택에 관련된 변수 독립변수 x

    -주택 가격 종속 변수 y 

    데이터 가져오기

    import numpy as np
    import pandas as pd
    from sklearn.datasets import load_boston
    boston= load_boston()
    print(boston.DESCR)
    boston_df= pd.DataFrame(boston.data, columns = boston.feature_names)
    boston_df.head()
    boston_df['PRICE'] = boston.target
    print('보스톤주택가격데이터셋크기: ', boston_df.shape)


    선형회귀분석 모델생성 및 훈련

    from sklearn.linear_model import LinearRegression
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import mean_squared_error, r2_score
    
    #X, Y 분할하기
    Y = boston_df['PRICE']
    X = boston_df.drop(['PRICE'], axis = 1, inplace= False)
    
    #훈련용데이터와평가용데이터분할하기
    X_train, X_test, Y_train, Y_test= train_test_split(X, Y, test_size= 0.3, random_state= 156)
    #선형회귀분석: 모델생성
    lr= LinearRegression()
    #선형회귀분석: 모델훈련
    lr.fit(X_train, Y_train)
    #선형회귀분석: 평가데이터에대한예측수행-> 예측결과Y_predict구하기
    Y_predict= lr.predict(X_test)
    mse= mean_squared_error(Y_test, Y_predict)
    rmse= np.sqrt(mse)
    print('MSE : {0:.3f}, RMSE : {1:.3f}'.format(mse, rmse))
    #평가지표 R2를 구함
    print('R^2(Variance score) : {0:.3f}'.format(r2_score(Y_test, Y_predict)))
    print('Y 절편값: ', lr.intercept_)
    print('회귀계수값: ', np.round(lr.coef_, 1))

     

    #회귀계수값과, X.COLUMNS 피처이름을 묶어서 SERIES
    coef= pd.Series(data = np.round(lr.coef_, 2), index = X.columns)
    coef.sort_values(ascending = False)



    차트그리기

    import matplotlib.pyplot as plt
    import seaborn as sns
    fig, axs = plt.subplots(figsize = (16, 16), ncols = 3, nrows = 5)
    x_features = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT']
    for i, feature in enumerate(x_features):
        row = int(i/3)
        col = i%3
        sns.regplot(x = feature, y = 'PRICE', data = boston_df, ax = axs[row][col])

     

     

     

     

    출처: 데이터 과학 기반의 파이썬 빅데이터 분석(이지은 지음)책을 공부하며 작성한 내용입니다.

Designed by Tistory.