#1. 데이터 로드
import pandas as pd
concrete = pd.read_csv("/content/drive/MyDrive/data500/concrete.csv")
concrete.head()
#2. 훈련, 테스트 데이터 분류
x = concrete.iloc[ : , 0:-1 ]
y = concrete['strength']
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.1,random_state=1)
#3. 정규화
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(x_train)
x_train2 = scaler.transform(x_train)
x_test2 = scaler.transform(x_test)
#4. 앙상블 모델 생성
from sklearn.linear_model import LinearRegression # 회귀모델
from sklearn.ensemble import RandomForestRegressor # 랜덤포레스트 회귀모델
from sklearn.ensemble import VotingRegressor # 수치들을 평균 내는 모델
from sklearn.svm import SVR # 수치예측 서포트 벡터 머신 모델
from sklearn.neural_network import MLPRegressor # 신경망 모델
r1 = LinearRegression()
r2 = RandomForestRegressor(n_estimators=10, random_state=1)
r3 = SVR( kernel = "rbf", C = 200, gamma = 0.1 )
r4 = MLPRegressor( hidden_layer_sizes = (100,50,20), solver = 'lbfgs', activation = 'relu')
er = VotingRegressor( [ ('lr',r1),('rf',r2),('SVR',r3),('mlp',r4) ] )
#5. 모델 훈련
er.fit(x_train2,y_train)
#6. 모델 예측
train_result = er.predict(x_train2) # 훈련 데이터의 정답 예측
test_result = er.predict(x_test2) # 테스트 데이터의 정답 예측
#7. 모델 평가
import numpy as np
print(np.corrcoef(y_train, train_result)) # 훈련 데이터의 상관계수
print(np.corrcoef(y_test, test_result)) # 테스트 데이터의 상관계수