인텔 AI 교육
인텔 AI 교육 - Module-11(선형 회귀 예제)
Regain
2023. 7. 25. 09:40
(해당 자료들은 인텔 AI for Future Workforce내용을 학습하고 가공한 내용입니다.)
< Module - 11 >
#선형 회귀
1. 정의
다른 관련 데이터 값을 사용하여 알 수 없는 데이터의 값을 예측하는 데이터 분석 기법이다. 기본적으로 단순 선형 기법은 두 데이터 변수 중 x를 독립변수로 가로 축을 따라 그리고, y를 종속변수로 세로 축에 그린다. 이때 y의 값을 반응 변수 또는 예측 변수라고도 한다.
즉, 두 데이터 변수 중 x를 가지고 y의 값을 예측하는 것이다.
#항공기 유지보수 예측
1. 문제
AI가 항공기에서 센서 데이터를 사용하여 유지보수가 필요한 센서를 예측하려 한다.
2. 라이브러리
>>> import pandas as pd
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> plt.style.use('ggplot')
>>> %matplotlib inline #창 아래 바로 시작할 수 있게 해줌
>>> from sklearn import linear_model
>>> from sklearn.ensemble import RandomForestRegressor
>>> from sklearn import model_selection
>>> from sklearn.tree import DecisionTreeRegressor, DecisionTreeClassifier, export_graphviz
>>> from sklearn import metrics
>>> from sklearn.feature_selection import SelectFromModel, RFECV
#데이터 불러오기
>>> df_train = pd.read_csv(r'[Dataset]_Module11_Train_(Maintenance).csv')
# test 데이터 불러오기
>>> df_test = pd.read_csv(r'[Dataset]_Module11_Test_(Maintenance).csv')
>>> df_test.head()
해당 문제를 해결하기 위해 이러한 라이브러리들과 데이터를 불러왔다.
3. 데이터 확인
(1) 'Head()' 함수로 첫 5행을 확인하여 본다. (소괄호에 출력할 수를 지정해줄 수 있다)
>>> df.train.head()
(2) 'describe()' 함수로 데이터에 대한 통계를 볼 수 있다.
>>> df_train.describe()
(3) 'isnull()' 함수로 누락된 값이 있는지 확인한다.(sum 함수와 함께 쓰면 누락된 값이 얼마나 있는지 볼 수도 있다)
>>> df_train.isnull().sum()
4. 데이터 시각화
'feature'의 분포를 확인하기 위해 표준 편차를 그려본다.
>>> features = []
>>> for col in df_train.columns:
>>> features.append(col)
# 입력 feature의 표준 편차를 그려서 비교합니다:
#df_train[features].std().plot(kind='bar', figsize=(10,6), title="Features Standard Deviation")
>>> df_train[features].std().plot(kind='bar', color='purple', figsize=(10,6), title="Features Standard Deviation")
# 더 나은 시각화를 위해 feature의 하위 집합인 feat를 사용하여 상관관계 행렬을 그려봅니다.
>>> feat= ['s12',
>>> 's7',
>>> 's21',
>>> 's20',
>>> 's6',
>>> 's14',
>>> 's9',
>>> 's13',
>>> 's8',
>>> 's3',
>>> 's17',
>>> 's2',
>>> 's15',
>>> 's4',
>>> 's11',
>>> 'ttf']
>>> import seaborn as sns
>>> cm = np.corrcoef(df_train[feat].values.T)
>>> sns.set(font_scale=1.0)
>>> fig = plt.figure(figsize=(10, 8))
>>> hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', annot_kws={'size': 8}, yticklabels=feat, xticklabels=feat)
>>> plt.title('Features Correlation Heatmap')
>>> plt.show()
5. 선형 회귀를 위한 데이터 준비
# 원본 feature 리스트 입니다.
>>> features_orig = ['setting1','setting2','setting3','s1','s2','s3','s4','s5','s6','s7','s8','s9','s10','s11','s12','s13','s14','s15','s16','s17','s18','s19','s20','s21']
# 회귀 레이블과 상관 관계가 낮거나 없는 feature 리스트 입니다.
>>> features_lowcr = ['setting3', 's1', 's10', 's18','s19','s16','s5', 'setting1', 'setting2']
# 회귀 레이블과 상관 관계가 있는 feature 리스트 입니다.
>>> features_corrl = ['s2', 's3', 's4', 's6', 's7', 's8', 's9', 's11', 's12', 's13', 's14', 's15', 's17', 's20','s21']
# features는 실험할 feature 집합을 보유하는 변수이다.
>>> features = features_orig
>>> X_train = df_train[features]
>>> y_train = df_train['ttf']
>>> X_test = df_test[features]
>>> y_test = df_test['ttf']
6. [참고] Helper 함수
7. 오차 확인을 위한 RMSE, MAE 구하기
#정확히 알기 위해선 참고의 Helper 함수를 확인
>>> linreg = linear_model.LinearRegression()
>>> linreg.fit(X_train, y_train)
>>> y_test_predict = linreg.predict(X_test)
>>> y_train_predict = linreg.predict(X_train)
>>> print('R^2 training: %.3f, R^2 test: %.3f' % (
>>> (metrics.r2_score(y_train, y_train_predict)),
>>> (metrics.r2_score(y_test, y_test_predict))))
>>> linreg_metrics = get_regression_metrics('Linear Regression', y_test, y_test_predict)
>>> linreg_metrics
8. 선형 회귀로 얻은 feature들의 가중치 시각화 하기
>>> plot_features_weights('Linear Regression', linreg.coef_, X_train.columns, 'c')
#정확히 알기 위해선 참고의 Helper 함수를 확인
참고 자료