#분류 싹 모아서 테스트
import numpy as np
from sklearn.datasets import fetch_covtype, load_iris, load_breast_cancer, load_wine, load_digits
import warnings
warnings.filterwarnings('ignore')
from sklearn.preprocessing import MinMaxScaler, RobustScaler
#1. 데이터
# datasets = load_iris()
# x = datasets.data
# y = datasets['target']
#2. 모델구성
# from tensorflow.keras.models import Sequential
# from tensorflow.keras.layers import Dense
from sklearn.svm import LinearSVC
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeRegressor, DecisionTreeClassifier
from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier
#랜덤 포레스트는 sklearn의 앙상블에 있다. 랜덤 포레스트는 DecisionTree가 앙상블된 모델이다.
#모델의 classifier 분류모델 regressor 회귀모델.
#문제에 따라 다른 모델씀
#서포트 백터 머신
# model = Sequential()
# model.add(Dense(10, activation='relu', input_shape=(4,)))
# model.add(Dense(10))
# model.add(Dense(10))
# model.add(Dense(10))
# # model.add(Dense(3, activation='softmax'))
# # model = LinearSVC() #알고리즘 연산이 다 포함되어있다. 나중에 다 공부해라. 어떤 모델인지 정도는 알아야한다.
# model = RandomForestRegressor()
# #LinearSVC의 파라미터 C 는 작으면 작을수록 직선을 긋는다.
# #분류문제에서 딥러닝은 layer를 거쳐 선을 수정하지만, 머신러닝은 단층 레이어로 선을 그어 클래스를 분류한다.
# #때문에 고도화된 문제는 완벽한 분류를 위해 개발자가 파라미터 조정을 해야한다.
# #3. 컴파일, 훈련
# # model.compile(loss='sparse_categorical_crossentropy',
# # optimizer='adam',
# # metrics=['acc'])
# # model.fit(x, y, epochs=100, validation_split=0.2)
# #다중분류에서, 원핫 하지 않았을경우 sparse 사용함. 대체로 0이라는 라벨값이 있을때만 사용한다. 원핫을 포함하고있는 loss
# model.fit(x,y) #머신러닝은 핏에 컴파일이 포함된다.
# #4. 평가 예측
# # results = model.evaluate(x,y)
# results = model.score(x,y) #
# print(results) #로스와 메트릭스의 첫번째 출력
# # 머신러닝은 다 단층이다
datasets = [load_iris(return_X_y=True), load_digits(return_X_y=True), load_wine(return_X_y=True), load_breast_cancer(return_X_y=True),fetch_covtype(return_X_y=True)]
models = [RandomForestClassifier(),DecisionTreeClassifier(),LogisticRegression(),LinearSVC()]
scaler = RobustScaler()
for i, dataset in enumerate(datasets):
x,y = dataset
x = scaler.fit_transform(x)
print(f"\\n데이터셋 {i+1}:")
for j, model in enumerate(models):
model.fit(x,y)
score = model.score(x,y)
print(f" model {j+1}: {score:.3f}")
# model = RandomForestClassifier()
# model1 = DecisionTreeClassifier()
# model2 = LogisticRegression()
# model3 = LinearSVC()
# #LinearSVC의 파라미터 C 는 작으면 작을수록 직선을 긋는다.
#분류문제에서 딥러닝은 layer를 거쳐 선을 수정하지만, 머신러닝은 단층 레이어로 선을 그어 클래스를 분류한다.
#때문에 고도화된 문제는 완벽한 분류를 위해 개발자가 파라미터 조정을 해야한다.
# #3. 컴파일, 훈련
# # model.compile(loss='sparse_categorical_crossentropy',
# # optimizer='adam',
# # metrics=['acc'])
# # model.fit(x, y, epochs=100, validation_split=0.2)
# #다중분류에서, 원핫 하지 않았을경우 sparse 사용함. 대체로 0이라는 라벨값이 있을때만 사용한다. 원핫을 포함하고있는 loss
# model.fit(x,y) #머신러닝은 핏에 컴파일이 포함된다.
# model1.fit(x,y)
# model2.fit(x,y)
# model3.fit(x,y)
# #4. 평가 예측
# # results = model.evaluate(x,y)
# results = model.score(x,y) #
# results1 = model1.score(x,y) #
# results2 = model2.score(x,y) #
# results3 = model3.score(x,y) #
# print('랜덤 포레스트 점수 : ', results) #로스와 메트릭스의 첫번째 출력
# print('디시젼 트리 점수 : ', results1)
# print('로지스틱리그레션 점수 : ', results2)
# print('리니어 SVC 점수 : ', results3)
# 머신러닝은 다 단층이다
# Results for dataset 1:
# model 1: 1.000
# model 2: 1.000
# model 3: 0.953
# model 4: 0.947
# Results for dataset 2:
# model 1: 1.000
# model 2: 1.000
# model 3: 0.997
# model 4: 0.993
# Results for dataset 3:
# model 1: 1.000
# model 2: 1.000
# model 3: 1.000
# model 4: 1.000
# Results for dataset 4:
# model 1: 1.000
# model 2: 1.000
# model 3: 0.988
# model 4: 0.988
# Results for dataset 5:
# model 1: 1.000
# model 2: 1.000
# model 3: 0.724
# model 4: 0.713
m01_08_boston