#%% 라이브러리 불러오기
import mglearn
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler, PolynomialFeatures
from sklearn.linear_model import Ridge 
import pandas as pd
# %% 한글 설정

import matplotlib
from matplotlib import font_manager, rc
font_loc = "C:/Windows/Fonts/malgunbd.ttf"
font_name = font_manager.FontProperties(fname=font_loc).get_name()
matplotlib.rc('font', family=font_name)
matplotlib.rcParams['axes.unicode_minus'] = False
#%% 데이터 셋 준비 
boston = load_boston()  # 데이터 셋 불러오기
print(type(boston.target), type(boston.data))
print(boston.target.shape, boston.data.shape)

df_boston = pd.DataFrame(boston.data,columns=boston.feature_names)
df_boston['target'] = pd.Series(boston.target)
df_boston.head() 
#%% 데이터 셋 확인 및 데이터 확장
X = df_boston.loc[:, 'CRIM':'LSTAT']         # 입력 데이터 
y = boston.target
print("정규화,확장 전 데이터 셋 : ", X.shape, y.shape)

normalize_X = MinMaxScaler().fit_transform(X)  # 입력 데이터 정규화
ex_X = PolynomialFeatures(degree=2, include_bias=False).fit_transform(normalize_X)  # 데이터 feature 추가 생성
print("정규화, 추가 생성 : ", ex_X.shape, y.shape)
# %% 선형 회귀 모델의 점수(결정계수)
from sklearn.linear_model import LinearRegression

X_train, X_test, y_train, y_test=train_test_split(ex_X, y, random_state=42)
lr=LinearRegression().fit(X_train,y_train)

print('학습용 데이터셋 점수 : {:.2f}'.format(lr.score(X_train,y_train)))
print('테스트용 데이터셋 점수 : {:.2f}'.format(lr.score(X_test,y_test)))
#%% 라쏘 모델 확인
from sklearn.linear_model import Lasso
import numpy as np

lasso = Lasso().fit(X_train, y_train)
print(lasso)
print("훈련 데이터 세트 점수 : {:.2f}".format(lasso.score(X_train, y_train)))
print("테스트 데이터 세트 점수 : {:.2f}".format(lasso.score(X_test, y_test)))
#%% 특성 확인
#  특성(feature)가 0이 아닌 것의 개수는?
print("사용한 특성의 수 : {:.2f}".format(np.sum(lasso.coef_ != 0)))
#%% 라쏘 모델 alpha를 변경
lasso00001 = Lasso(alpha=0.0001, max_iter=100000).fit(X_train, y_train)
print("훈련 데이터 세트 점수 : {:.2f}".format(lasso00001.score(X_train, y_train)))
print("테스트 데이터 세트 점수 : {:.2f}".format(lasso00001.score(X_test, y_test)))
print("사용한 특성의 수 : ", np.sum(lasso00001.coef_ != 0))
#%% 
# 0.01 -> 개
lasso001 = Lasso(alpha=0.01, max_iter=100000).fit(X_train, y_train)
print("훈련 데이터 세트 점수 : {:.2f}".format(lasso001.score(X_train, y_train)))
print("테스트 데이터 세트 점수 : {:.2f}".format(lasso001.score(X_test, y_test)))
print("사용한 특성의 수 : {}\n".format(np.sum(lasso001.coef_ != 0)))

# 0.1 -> 
lasso01 = Lasso(alpha=0.1, max_iter=100000).fit(X_train, y_train)
print("훈련 데이터 세트 점수 : {:.2f}".format(lasso01.score(X_train, y_train)))
print("테스트 데이터 세트 점수 : {:.2f}".format(lasso01.score(X_test, y_test)))
print("사용한 특성의 수 : ", np.sum(lasso01.coef_ != 0))
# %%
lasso = Lasso(alpha=1).fit(X_train, y_train)

import matplotlib.pyplot as plt

plt.figure(figsize=(10,6))
# plt.plot(lasso00001.coef_, "r^", label="Lasso alpha=0.0001")
plt.plot(lasso001.coef_, 'go', label="Lasso alpha=0.01")
plt.plot(lasso01.coef_, 'yv', label="Lasso alpha=0.1")
plt.plot(lasso.coef_, "bs", label="Lasso alpha=10")

plt.xlabel("계수 목록")
plt.ylabel("계수 크기")
plt.ylim(-25, 25)
plt.legend(ncol=2, loc=(0,1.05))
plt.show()
# %%
plt.figure(figsize=(10,6))
plt.plot(lasso00001.coef_, "r^", label="Lasso alpha=0.0001")
plt.plot(lasso001.coef_, 'go', label="Lasso alpha=0.01")
plt.plot(lasso01.coef_, 'yv', label="Lasso alpha=0.1")
# plt.plot(lasso.coef_, "rs", label="Lasso alpha=1")

plt.xlabel("계수 목록")
plt.ylabel("계수 크기")
plt.ylim(-25, 25)
plt.legend(ncol=2, loc=(0,1.05))
plt.show()
5c5fb2e14009cc852417e941fa0c7b0f9f78651c
<mask token>

<mask token>
matplotlib.rc('font', family=font_name)
<mask token>
print(type(boston.target), type(boston.data))
print(boston.target.shape, boston.data.shape)
<mask token>
df_boston.head()
<mask token>
print('정규화,확장 전 데이터 셋 : ', X.shape, y.shape)
<mask token>
print('정규화, 추가 생성 : ', ex_X.shape, y.shape)
<mask token>
print('학습용 데이터셋 점수 : {:.2f}'.format(lr.score(X_train, y_train)))
print('테스트용 데이터셋 점수 : {:.2f}'.format(lr.score(X_test, y_test)))
<mask token>
print(lasso)
print('훈련 데이터 세트 점수 : {:.2f}'.format(lasso.score(X_train, y_train)))
print('테스트 데이터 세트 점수 : {:.2f}'.format(lasso.score(X_test, y_test)))
print('사용한 특성의 수 : {:.2f}'.format(np.sum(lasso.coef_ != 0)))
<mask token>
print('훈련 데이터 세트 점수 : {:.2f}'.format(lasso00001.score(X_train, y_train)))
print('테스트 데이터 세트 점수 : {:.2f}'.format(lasso00001.score(X_test, y_test)))
print('사용한 특성의 수 : ', np.sum(lasso00001.coef_ != 0))
<mask token>
print('훈련 데이터 세트 점수 : {:.2f}'.format(lasso001.score(X_train, y_train)))
print('테스트 데이터 세트 점수 : {:.2f}'.format(lasso001.score(X_test, y_test)))
print('사용한 특성의 수 : {}\n'.format(np.sum(lasso001.coef_ != 0)))
<mask token>
print('훈련 데이터 세트 점수 : {:.2f}'.format(lasso01.score(X_train, y_train)))
print('테스트 데이터 세트 점수 : {:.2f}'.format(lasso01.score(X_test, y_test)))
print('사용한 특성의 수 : ', np.sum(lasso01.coef_ != 0))
<mask token>
plt.figure(figsize=(10, 6))
plt.plot(lasso001.coef_, 'go', label='Lasso alpha=0.01')
plt.plot(lasso01.coef_, 'yv', label='Lasso alpha=0.1')
plt.plot(lasso.coef_, 'bs', label='Lasso alpha=10')
plt.xlabel('계수 목록')
plt.ylabel('계수 크기')
plt.ylim(-25, 25)
plt.legend(ncol=2, loc=(0, 1.05))
plt.show()
plt.figure(figsize=(10, 6))
plt.plot(lasso00001.coef_, 'r^', label='Lasso alpha=0.0001')
plt.plot(lasso001.coef_, 'go', label='Lasso alpha=0.01')
plt.plot(lasso01.coef_, 'yv', label='Lasso alpha=0.1')
plt.xlabel('계수 목록')
plt.ylabel('계수 크기')
plt.ylim(-25, 25)
plt.legend(ncol=2, loc=(0, 1.05))
plt.show()

<mask token>
font_loc = 'C:/Windows/Fonts/malgunbd.ttf'
font_name = font_manager.FontProperties(fname=font_loc).get_name()
matplotlib.rc('font', family=font_name)
matplotlib.rcParams['axes.unicode_minus'] = False
boston = load_boston()
print(type(boston.target), type(boston.data))
print(boston.target.shape, boston.data.shape)
df_boston = pd.DataFrame(boston.data, columns=boston.feature_names)
df_boston['target'] = pd.Series(boston.target)
df_boston.head()
X = df_boston.loc[:, 'CRIM':'LSTAT']
y = boston.target
print('정규화,확장 전 데이터 셋 : ', X.shape, y.shape)
normalize_X = MinMaxScaler().fit_transform(X)
ex_X = PolynomialFeatures(degree=2, include_bias=False).fit_transform(
    normalize_X)
print('정규화, 추가 생성 : ', ex_X.shape, y.shape)
<mask token>
X_train, X_test, y_train, y_test = train_test_split(ex_X, y, random_state=42)
lr = LinearRegression().fit(X_train, y_train)
print('학습용 데이터셋 점수 : {:.2f}'.format(lr.score(X_train, y_train)))
print('테스트용 데이터셋 점수 : {:.2f}'.format(lr.score(X_test, y_test)))
<mask token>
lasso = Lasso().fit(X_train, y_train)
print(lasso)
print('훈련 데이터 세트 점수 : {:.2f}'.format(lasso.score(X_train, y_train)))
print('테스트 데이터 세트 점수 : {:.2f}'.format(lasso.score(X_test, y_test)))
print('사용한 특성의 수 : {:.2f}'.format(np.sum(lasso.coef_ != 0)))
lasso00001 = Lasso(alpha=0.0001, max_iter=100000).fit(X_train, y_train)
print('훈련 데이터 세트 점수 : {:.2f}'.format(lasso00001.score(X_train, y_train)))
print('테스트 데이터 세트 점수 : {:.2f}'.format(lasso00001.score(X_test, y_test)))
print('사용한 특성의 수 : ', np.sum(lasso00001.coef_ != 0))
lasso001 = Lasso(alpha=0.01, max_iter=100000).fit(X_train, y_train)
print('훈련 데이터 세트 점수 : {:.2f}'.format(lasso001.score(X_train, y_train)))
print('테스트 데이터 세트 점수 : {:.2f}'.format(lasso001.score(X_test, y_test)))
print('사용한 특성의 수 : {}\n'.format(np.sum(lasso001.coef_ != 0)))
lasso01 = Lasso(alpha=0.1, max_iter=100000).fit(X_train, y_train)
print('훈련 데이터 세트 점수 : {:.2f}'.format(lasso01.score(X_train, y_train)))
print('테스트 데이터 세트 점수 : {:.2f}'.format(lasso01.score(X_test, y_test)))
print('사용한 특성의 수 : ', np.sum(lasso01.coef_ != 0))
lasso = Lasso(alpha=1).fit(X_train, y_train)
<mask token>
plt.figure(figsize=(10, 6))
plt.plot(lasso001.coef_, 'go', label='Lasso alpha=0.01')
plt.plot(lasso01.coef_, 'yv', label='Lasso alpha=0.1')
plt.plot(lasso.coef_, 'bs', label='Lasso alpha=10')
plt.xlabel('계수 목록')
plt.ylabel('계수 크기')
plt.ylim(-25, 25)
plt.legend(ncol=2, loc=(0, 1.05))
plt.show()
plt.figure(figsize=(10, 6))
plt.plot(lasso00001.coef_, 'r^', label='Lasso alpha=0.0001')
plt.plot(lasso001.coef_, 'go', label='Lasso alpha=0.01')
plt.plot(lasso01.coef_, 'yv', label='Lasso alpha=0.1')
plt.xlabel('계수 목록')
plt.ylabel('계수 크기')
plt.ylim(-25, 25)
plt.legend(ncol=2, loc=(0, 1.05))
plt.show()

import mglearn
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler, PolynomialFeatures
from sklearn.linear_model import Ridge
import pandas as pd
import matplotlib
from matplotlib import font_manager, rc
font_loc = 'C:/Windows/Fonts/malgunbd.ttf'
font_name = font_manager.FontProperties(fname=font_loc).get_name()
matplotlib.rc('font', family=font_name)
matplotlib.rcParams['axes.unicode_minus'] = False
boston = load_boston()
print(type(boston.target), type(boston.data))
print(boston.target.shape, boston.data.shape)
df_boston = pd.DataFrame(boston.data, columns=boston.feature_names)
df_boston['target'] = pd.Series(boston.target)
df_boston.head()
X = df_boston.loc[:, 'CRIM':'LSTAT']
y = boston.target
print('정규화,확장 전 데이터 셋 : ', X.shape, y.shape)
normalize_X = MinMaxScaler().fit_transform(X)
ex_X = PolynomialFeatures(degree=2, include_bias=False).fit_transform(
    normalize_X)
print('정규화, 추가 생성 : ', ex_X.shape, y.shape)
from sklearn.linear_model import LinearRegression
X_train, X_test, y_train, y_test = train_test_split(ex_X, y, random_state=42)
lr = LinearRegression().fit(X_train, y_train)
print('학습용 데이터셋 점수 : {:.2f}'.format(lr.score(X_train, y_train)))
print('테스트용 데이터셋 점수 : {:.2f}'.format(lr.score(X_test, y_test)))
from sklearn.linear_model import Lasso
import numpy as np
lasso = Lasso().fit(X_train, y_train)
print(lasso)
print('훈련 데이터 세트 점수 : {:.2f}'.format(lasso.score(X_train, y_train)))
print('테스트 데이터 세트 점수 : {:.2f}'.format(lasso.score(X_test, y_test)))
print('사용한 특성의 수 : {:.2f}'.format(np.sum(lasso.coef_ != 0)))
lasso00001 = Lasso(alpha=0.0001, max_iter=100000).fit(X_train, y_train)
print('훈련 데이터 세트 점수 : {:.2f}'.format(lasso00001.score(X_train, y_train)))
print('테스트 데이터 세트 점수 : {:.2f}'.format(lasso00001.score(X_test, y_test)))
print('사용한 특성의 수 : ', np.sum(lasso00001.coef_ != 0))
lasso001 = Lasso(alpha=0.01, max_iter=100000).fit(X_train, y_train)
print('훈련 데이터 세트 점수 : {:.2f}'.format(lasso001.score(X_train, y_train)))
print('테스트 데이터 세트 점수 : {:.2f}'.format(lasso001.score(X_test, y_test)))
print('사용한 특성의 수 : {}\n'.format(np.sum(lasso001.coef_ != 0)))
lasso01 = Lasso(alpha=0.1, max_iter=100000).fit(X_train, y_train)
print('훈련 데이터 세트 점수 : {:.2f}'.format(lasso01.score(X_train, y_train)))
print('테스트 데이터 세트 점수 : {:.2f}'.format(lasso01.score(X_test, y_test)))
print('사용한 특성의 수 : ', np.sum(lasso01.coef_ != 0))
lasso = Lasso(alpha=1).fit(X_train, y_train)
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 6))
plt.plot(lasso001.coef_, 'go', label='Lasso alpha=0.01')
plt.plot(lasso01.coef_, 'yv', label='Lasso alpha=0.1')
plt.plot(lasso.coef_, 'bs', label='Lasso alpha=10')
plt.xlabel('계수 목록')
plt.ylabel('계수 크기')
plt.ylim(-25, 25)
plt.legend(ncol=2, loc=(0, 1.05))
plt.show()
plt.figure(figsize=(10, 6))
plt.plot(lasso00001.coef_, 'r^', label='Lasso alpha=0.0001')
plt.plot(lasso001.coef_, 'go', label='Lasso alpha=0.01')
plt.plot(lasso01.coef_, 'yv', label='Lasso alpha=0.1')
plt.xlabel('계수 목록')
plt.ylabel('계수 크기')
plt.ylim(-25, 25)
plt.legend(ncol=2, loc=(0, 1.05))
plt.show()

#%% 라이브러리 불러오기
import mglearn
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler, PolynomialFeatures
from sklearn.linear_model import Ridge 
import pandas as pd
# %% 한글 설정

import matplotlib
from matplotlib import font_manager, rc
font_loc = "C:/Windows/Fonts/malgunbd.ttf"
font_name = font_manager.FontProperties(fname=font_loc).get_name()
matplotlib.rc('font', family=font_name)
matplotlib.rcParams['axes.unicode_minus'] = False
#%% 데이터 셋 준비 
boston = load_boston()  # 데이터 셋 불러오기
print(type(boston.target), type(boston.data))
print(boston.target.shape, boston.data.shape)

df_boston = pd.DataFrame(boston.data,columns=boston.feature_names)
df_boston['target'] = pd.Series(boston.target)
df_boston.head() 
#%% 데이터 셋 확인 및 데이터 확장
X = df_boston.loc[:, 'CRIM':'LSTAT']         # 입력 데이터 
y = boston.target
print("정규화,확장 전 데이터 셋 : ", X.shape, y.shape)

normalize_X = MinMaxScaler().fit_transform(X)  # 입력 데이터 정규화
ex_X = PolynomialFeatures(degree=2, include_bias=False).fit_transform(normalize_X)  # 데이터 feature 추가 생성
print("정규화, 추가 생성 : ", ex_X.shape, y.shape)
# %% 선형 회귀 모델의 점수(결정계수)
from sklearn.linear_model import LinearRegression

X_train, X_test, y_train, y_test=train_test_split(ex_X, y, random_state=42)
lr=LinearRegression().fit(X_train,y_train)

print('학습용 데이터셋 점수 : {:.2f}'.format(lr.score(X_train,y_train)))
print('테스트용 데이터셋 점수 : {:.2f}'.format(lr.score(X_test,y_test)))
#%% 라쏘 모델 확인
from sklearn.linear_model import Lasso
import numpy as np

lasso = Lasso().fit(X_train, y_train)
print(lasso)
print("훈련 데이터 세트 점수 : {:.2f}".format(lasso.score(X_train, y_train)))
print("테스트 데이터 세트 점수 : {:.2f}".format(lasso.score(X_test, y_test)))
#%% 특성 확인
#  특성(feature)가 0이 아닌 것의 개수는?
print("사용한 특성의 수 : {:.2f}".format(np.sum(lasso.coef_ != 0)))
#%% 라쏘 모델 alpha를 변경
lasso00001 = Lasso(alpha=0.0001, max_iter=100000).fit(X_train, y_train)
print("훈련 데이터 세트 점수 : {:.2f}".format(lasso00001.score(X_train, y_train)))
print("테스트 데이터 세트 점수 : {:.2f}".format(lasso00001.score(X_test, y_test)))
print("사용한 특성의 수 : ", np.sum(lasso00001.coef_ != 0))
#%% 
# 0.01 -> 개
lasso001 = Lasso(alpha=0.01, max_iter=100000).fit(X_train, y_train)
print("훈련 데이터 세트 점수 : {:.2f}".format(lasso001.score(X_train, y_train)))
print("테스트 데이터 세트 점수 : {:.2f}".format(lasso001.score(X_test, y_test)))
print("사용한 특성의 수 : {}\n".format(np.sum(lasso001.coef_ != 0)))

# 0.1 -> 
lasso01 = Lasso(alpha=0.1, max_iter=100000).fit(X_train, y_train)
print("훈련 데이터 세트 점수 : {:.2f}".format(lasso01.score(X_train, y_train)))
print("테스트 데이터 세트 점수 : {:.2f}".format(lasso01.score(X_test, y_test)))
print("사용한 특성의 수 : ", np.sum(lasso01.coef_ != 0))
# %%
lasso = Lasso(alpha=1).fit(X_train, y_train)

import matplotlib.pyplot as plt

plt.figure(figsize=(10,6))
# plt.plot(lasso00001.coef_, "r^", label="Lasso alpha=0.0001")
plt.plot(lasso001.coef_, 'go', label="Lasso alpha=0.01")
plt.plot(lasso01.coef_, 'yv', label="Lasso alpha=0.1")
plt.plot(lasso.coef_, "bs", label="Lasso alpha=10")

plt.xlabel("계수 목록")
plt.ylabel("계수 크기")
plt.ylim(-25, 25)
plt.legend(ncol=2, loc=(0,1.05))
plt.show()
# %%
plt.figure(figsize=(10,6))
plt.plot(lasso00001.coef_, "r^", label="Lasso alpha=0.0001")
plt.plot(lasso001.coef_, 'go', label="Lasso alpha=0.01")
plt.plot(lasso01.coef_, 'yv', label="Lasso alpha=0.1")
# plt.plot(lasso.coef_, "rs", label="Lasso alpha=1")

plt.xlabel("계수 목록")
plt.ylabel("계수 크기")
plt.ylim(-25, 25)
plt.legend(ncol=2, loc=(0,1.05))
plt.show()