๋Ÿฌ๋‹์Šคํ‘ผ์ฆˆ ์ˆ˜์—… ์ •๋ฆฌ 

 

 

< ์ด์ „ ๊ธ€ > 

https://silvercoding.tistory.com/62

 

[boston ๋ฐ์ดํ„ฐ ๋ถ„์„] 1. ์ฐจ์›์ถ•์†Œ (PCA) ํŒŒ์ด์ฌ ์˜ˆ์ œ

๋Ÿฌ๋‹์Šคํ‘ผ์ฆˆ ์ˆ˜์—… ์ •๋ฆฌ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ & ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ - ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ import pandas as pd import matplotlib.pyplot as plt import seaborn as sns - ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ data = pd.read_csv('./data/bosto..

silvercoding.tistory.com

 

 

 


 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ & ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ 
import pandas as pd 
import matplotlib.pyplot as plt
import seaborn as sns
data = pd.read_csv('./data/boston.csv')
data.head()

 

 

 


 ๊ตฐ์ง‘ํ™” Clustering 
del data['chas']

์—ฐ์†ํ˜• ๋ฐ์ดํ„ฐ๋งŒ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•˜์—ฌ ๋ฒ”์ฃผํ˜• ๋ฐ์ดํ„ฐ๋Š” ์ œ๊ฑฐํ•œ๋‹ค. 

medv = data['medv']
del data['medv']

ํƒ€๊ฒŸ๋ณ€์ˆ˜๋ฅผ ๋ณต์‚ฌํ•ด ๋†“๊ณ , ํƒ€๊ฒŸ๋ณ€์ˆ˜ ์ปฌ๋Ÿผ์„ ์ง€์›Œ์ค€๋‹ค. ( pca๋ฅผ ์œ„ํ•˜์—ฌ )

 

 

์ฐจ์› ์ถ•์†Œ (PCA) : 12์ฐจ์› -> 2์ฐจ์› 

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

์ฐจ์› ์ถ•์†Œ์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ import ํ•ด์ค€๋‹ค. 

 

 

- ์ •๊ทœํ™”

scaler = StandardScaler()

์ •๊ทœํ™” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 

# ๋ฐ์ดํ„ฐ ํ•™์Šต
scaler.fit(data)
# ๋ณ€ํ™˜
scaler_data = scaler.transform(data)

data ์ „์ฒด๋ฅผ ์ •๊ทœํ™”ํ•˜์—ฌ scaler_data์— ์ €์žฅํ•ด ์ค€๋‹ค. 

 

 

- PCA

pca = PCA(n_components = 2)

PCA ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 2์ฐจ์› ์‹œ๊ฐํ™”๋ฅผ ์œ„ํ•˜์—ฌ ๋ณ€์ˆ˜๋Š” 2๊ฐœ๋กœ ์„ค์ •ํ•œ๋‹ค. 

pca.fit(scaler_data)

pca๋กœ scaler_data๋ฅผ ํ•™์Šต์‹œํ‚จ๋‹ค. 

data2 = pd.DataFrame(data = pca.transform(scaler_data), columns=['pc1', 'pc2'])

pca๋กœ ๋ณ€ํ™˜ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์œผ๋กœ data2์— ์ €์žฅํ•œ๋‹ค. 

data2.head()

 

 

๊ตฐ์ง‘์˜ ๊ฐœ์ˆ˜ ์ •ํ•˜๊ธฐ - Elbow Point ์ง€์ • 

from sklearn.cluster import KMeans

KMeans(n_cluster = k)

  • k๊ฐœ์˜ ๊ตฐ์ง‘ํ™”๋ฅผ ํ•˜๊ฒ ๋‹ค๋Š” ๊ฐ์ฒด ์ƒ์„ฑ

Kmeans.fit()

  • ํ•™์Šต์‹œํ‚ค๊ธฐ

KMeans.inertia_

  • ํ•™์Šต๋œ KMeans์˜ ์‘์ง‘๋„๋ฅผ ํ™•์ธ
  • ์‘์ง‘๋„๋ž€ ๊ฐ ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ์ž์‹ ์ด ์†ํ•œ ๊ตฐ์ง‘์˜ ์ค‘์‹ฌ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์˜๋ฏธ
  • ์ฆ‰, ๋‚ฎ์„์ˆ˜๋ก ๊ตฐ์ง‘ํ™”๊ฐ€ ๋” ์ž˜๋˜์–ด์žˆ์Œ.

KMeans.predict(data)

  • ํ•™์Šต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜์‹œ์ผœ์คŒ

x = []   # k ๊ฐ€ ๋ช‡๊ฐœ์ธ์ง€ 
y = []   # ์‘์ง‘๋„๊ฐ€ ๋ช‡์ธ์ง€ 

for k in range(1, 30):
    kmeans = KMeans(n_clusters = k)
    kmeans.fit(data2)
    
    x.append(k)
    y.append(kmeans.inertia_)

1๋ถ€ํ„ฐ 30๊นŒ์ง€ ๊ตฐ์ง‘ํ™”๋ฅผ ํ•ด๋ณด๊ณ , ๊ฐ€์žฅ ์ ์ ˆํ•œ ์‘์ง‘๋„์˜ ๊ตฐ์ง‘๊ฐœ์ˆ˜๋ฅผ ์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ ค๋ณธ๋‹ค. 

plt.plot(x, y)

๊ตฐ์ง‘์˜ ๊ฐœ์ˆ˜ ๋ณ„ ์‘์ง‘๋„ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ ค๋ณด๋‹ˆ 3~5๊ฐœ ์ •๋„๊ฐ€ ์ ๋‹นํ•  ๊ฒƒ ๊ฐ™๋‹ค. Elbow Point๋ฅผ 4๋กœ ์ง€์ •ํ•˜๊ณ  ๊ตฐ์ง‘ํ™”๋ฅผ ํ•ด๋ณด๋„๋ก ํ•œ๋‹ค. 

 

 

 

๊ตฐ์ง‘ํ™”

kmeans = KMeans(n_clusters=4)

๊ตฐ์ง‘์˜ ๊ฐœ์ˆ˜๋ฅผ 4๋กœ ์„ค์ •ํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 

kmeans.fit(data2)

์œ„์—์„œ ์ƒ์„ฑํ•ด ๋†“์€ data2๋ฅผ ํ•™์Šตํ•œ๋‹ค. 

data2['labels'] = kmeans.predict(data2)

๊ฐ๊ฐ์˜ ์˜ˆ์ธก๋œ ๊ตฐ์ง‘ ์ข…๋ฅ˜๋ฅผ labels ์ปฌ๋Ÿผ์— ๋„ฃ์–ด์ค€๋‹ค. 

data2.head()

lebels๊ฐ€ 1์ด๋ผ๋Š” ๊ฒƒ์€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ 1๋ฒˆ ๊ตฐ์ง‘์— ํฌํ•จ๋˜์—ˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. 

sns.scatterplot(x='pc1', y='pc2', hue='labels', data=data2)

์œ„์™€ ๊ฐ™์ด ๊ตฐ์ง‘์ด ํ˜•์„ฑ๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

๊ฒฐ๊ณผ ํ•ด์„ 

- ์–ด๋–ค ๊ทธ๋ฃน์˜ ์ง‘ ๊ฐ’์ด ๊ฐ€์žฅ ๋†’์„๊นŒ ? : ํ‰๊ท ์œผ๋กœ ๋น„๊ต

data2['medv'] = medv

๊ฐ ๊ทธ๋ฃน์˜ ์ง‘๊ฐ’ ํ‰๊ท ์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์ฒ˜์Œ์— ์ €์žฅํ•ด ์ฃผ์—ˆ๋˜ medv ์ปฌ๋Ÿผ์„ data2์˜ medv ์ปฌ๋Ÿผ์œผ๋กœ ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค. 

data2.head()

data2[data2['labels']==0]['medv'].mean()

0๋ฒˆ ๊ตฐ์ง‘์˜ ์ง‘๊ฐ’์˜ ํ‰๊ท ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ•œ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ชจ๋“  ๊ตฐ์ง‘์˜ ์ง‘๊ฐ’์˜ ํ‰๊ท ์„ ๊ทธ๋ž˜ํ”„๋กœ ๊ทธ๋ ค๋ณด๋„๋ก ํ•œ๋‹ค. 

medv_list = []

for i in range(4):
    medv_avg = data2[data2['labels']==i]['medv'].mean()
    medv_list.append(medv_avg)
sns.barplot(x=['group_0', 'group_1', 'group_2', 'group_3'], y=medv_list)

 


์ง‘๊ฐ’์˜ ํ‰๊ท  ์ตœ์ƒ์œ„ ๊ทธ๋ฃน : group_2

์ง‘๊ฐ’์˜ ํ‰๊ท  ์ตœํ•˜์œ„ ๊ทธ๋ฃน : group_0

 

---> ์ตœ์ƒ์œ„ ๊ทธ๋ฃน๊ณผ ์ตœํ•˜์œ„ ๊ทธ๋ฃน์„ ๋น„๊ตํ•˜์—ฌ ์ง‘๊ฐ’์˜ ํ‰๊ท ์ด ๋†’๊ฑฐ๋‚˜ ๋‚ฎ์€ ์ด์œ ์— ๋Œ€ํ•˜์—ฌ ํ™•์ธํ•ด ๋ณธ๋‹ค. 


* ์›๋ณธ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉํ•˜์—ฌ ์›์ธ ๋ถ„์„ํ•ด๋ณด๊ธฐ 

data['labels'] = data2['labels']

์›๋ณธ๋ฐ์ดํ„ฐ์— ๊ทธ๋ฃน labels๋ฅผ ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค. 

group = data[(data['labels']==0) | (data['labels']==2)]

๊ทธ๋ฃน0, ๊ทธ๋ฃน2 ๋งŒ ์„ ํƒํ•˜์—ฌ group ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค. 

group = group.groupby('labels').mean().reset_index()

gropuby๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ labels ์ปฌ๋Ÿผ ๋ณ„๋กœ ๋ชจ๋“  ์ปฌ๋Ÿผ์˜ ํ‰๊ท ๊ฐ’์„ ๊ตฌํ•˜๊ณ , groupby๋กœ ์ธํ•˜์—ฌ ์ธ๋ฑ์Šค๊ฐ€ ๋˜์—ˆ๋˜ labels๋ฅผ reset_index()๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹ค์‹œ ์ปฌ๋Ÿผ์œผ๋กœ ๋ณ€๊ฒฝํ•ด ์ค€๋‹ค. 

group

๊ฐ ๊ทธ๋ฃน๋ณ„ ํ‰๊ท ์ด ๊ตฌํ•ด์ง„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ์‹œ๊ฐํ™” ํ•˜์—ฌ ๋น„๊ตํ•ด ๋ณด๋„๋ก ํ•œ๋‹ค. 

 

 

๊ฒฐ๊ณผ ํ•ด์„ - ์‹œ๊ฐํ™” 

column = group.columns
fig, ax = plt.subplots(2, 6, figsize=(30, 13))

for i in range(12):
    sns.barplot('labels', column[i+1], data=group, ax=ax[i//6, i%6])

๋‘๊ฐœ์˜ ๋ง‰๋Œ€๊ฐ€ ๊ทธ๋ ค์ ธ ์žˆ๋Š” ๋ง‰๋Œ€๊ทธ๋ž˜ํ”„๋กœ, ์™ผ์ชฝ์ด ๋†’์œผ๋ฉด ์ง‘๊ฐ’์ด ๋‚ฎ์€ ์ด์œ ์˜ ๊ทผ๊ฑฐ๊ฐ€, ์˜ค๋ฅธ์ชฝ์ด ๋†’์œผ๋ฉด ์ง‘๊ฐ’์ด ๋†’์€ ์ด์œ ์˜ ๊ทผ๊ฑฐ๊ฐ€ ๋œ๋‹ค๊ณ  ํ•ด์„ํ•œ๋‹ค. 

 

 

๊ฒฐ๋ก 

- (0,0) ์œ„์น˜์˜ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ณด๋ฉด crim( ๋ฒ”์ฃ„์œจ )์ด 0๋ฒˆ ๊ทธ๋ฃน์—์„œ ์›”๋“ฑํžˆ ๋†’๋‹ค. ์ด๋Š” ๋ฒ”์ฃ„์œจ์ด ๋†’์„์ˆ˜๋ก ์ง‘๊ฐ’์ด ๋‚ฎ๋‹ค๊ณ  ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค. 

- (0, 1) ์œ„์น˜์˜ ๊ทธ๋ž˜ํ”„์—์„œ๋Š” zn( 25,000 ํ‰๋ฐฉ๋น„ํŠธ๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๊ฑฐ์ฃผ์ง€์—ญ ๋น„์œจ ) ์ด ๋†’์„์ˆ˜๋ก ์ง‘๊ฐ’์ด ๋†’๋‹ค๊ณ  ํ•ด์„๋œ๋‹ค.

- ๊ทธ๋‹ค์Œ์œผ๋กœ ์ฐจ์ด๊ฐ€ ์ ์–ด ๋ณด์ด๋Š” ๊ฒƒ์€ (1, 1) ์œ„์น˜์˜ ๊ทธ๋ž˜ํ”„์ด๋‹ค. rad( ๋ฐฉ์‚ฌํ˜• ๊ณ ์†๋„๋กœ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ ) ๊ฐ€ ๋†’์„์ˆ˜๋ก ( ๋ฐฉ์‚ฌํ˜• ๊ณ ์†๋„๋กœ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€์ˆ˜๋ก ) ์ง‘๊ฐ’์ด ๋‚ฎ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

์ด์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ ํ•ด์„์„ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. 


 

 

 

 

๋Ÿฌ๋‹์Šคํ‘ผ์ฆˆ ์ˆ˜์—… ์ •๋ฆฌ 

 

 


 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ & ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ 

- ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ 

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

 

- ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ 

data = pd.read_csv('./data/boston.csv')
data.head()

 

- ๋ฐ์ดํ„ฐ ์‚ดํŽด๋ณด๊ธฐ 

data.info()

506๊ฐœ์˜ row๊ฐ€ ์กด์žฌํ•˜๊ณ , ๊ฒฐ์ธก๊ฐ’์€ ์—†๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

data.columns

์ด 14๊ฐœ์˜ ์ปฌ๋Ÿผ์ด ์žˆ๋‹ค. ๊ฐ ์ปฌ๋Ÿผ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

  • crim: ๋ฒ”์ฃ„์œจ
  • zn: 25,000 ํ‰๋ฐฉํ”ผํŠธ๋ฅผ ์ดˆ๊ณผ ๊ฑฐ์ฃผ์ง€์—ญ ๋น„์œจ
  • indus: ๋น„์†Œ๋งค์ƒ์—…์ง€์—ญ ๋ฉด์  ๋น„์œจ
  • chas: ์ฐฐ์Šค๊ฐ•์˜ ๊ฒฝ๊ณ„์— ์œ„์น˜ํ•œ ๊ฒฝ์šฐ๋Š” 1, ์•„๋‹ˆ๋ฉด 0
  • nox: ์ผ์‚ฐํ™”์งˆ์†Œ ๋†๋„
  • rm: ์ฃผํƒ๋‹น ๋ฐฉ ์ˆ˜
  • age: 1940๋…„ ์ด์ „์— ๊ฑด์ถ•๋œ ์ฃผํƒ์˜ ๋น„์œจ
  • dis: ์ง์—…์„ผํ„ฐ์˜ ๊ฑฐ๋ฆฌ
  • rad: ๋ฐฉ์‚ฌํ˜• ๊ณ ์†๋„๋กœ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ
  • tax: ์žฌ์‚ฐ์„ธ์œจ
  • ptratio: ํ•™์ƒ/๊ต์‚ฌ ๋น„์œจ
  • b: ์ธ๊ตฌ ์ค‘ ํ‘์ธ ๋น„์œจ
  • lstat: ์ธ๊ตฌ ์ค‘ ํ•˜์œ„ ๊ณ„์ธต ๋น„์œจ
  • medv : ๋ณด์Šคํ„ด 506๊ฐœ ํƒ€์šด์˜ 1978๋…„ ์ฃผํƒ ๊ฐ€๊ฒฉ ์ค‘์•™๊ฐ’ (๋‹จ์œ„ 1,000 ๋‹ฌ๋Ÿฌ)

 Feature Selection : ์ƒ๊ด€๊ณ„์ˆ˜์™€ ๊ณต๋ถ„์‚ฐ 

- ๋ฒ”์ฃผํ˜• ๋ณ€์ˆ˜ ์ œ๊ฑฐ 

del data['chas']

์ƒ๊ด€๊ณ„์ˆ˜์™€ ๊ณต๋ถ„์‚ฐ์€ ์—ฐ์†ํ˜• ์ž๋ฃŒ๋ฅผ ๋ถ„์„ํ•˜๋ฏ€๋กœ ๋ฒ”์ฃผํ˜• ๋ณ€์ˆ˜๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. ์‹ค์ œ ๋ณ€์ˆ˜๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์€ ์‹ ์ค‘ํ•˜๊ฒŒ ํ–‰ํ•ด์•ผ ํ•˜์ง€๋งŒ , ํ•™์Šต์„ ์œ„ํ•˜์—ฌ ์ œ๊ฑฐํ•œ๋‹ค.

 

๊ฐ€์„ค ์„ธ์šฐ๊ธฐ 

1. ๋ฒ”์ฃ„์œจ์ด ๋†’์€ ๊ณณ์˜ ์ง‘๊ฐ’์€ ๋‚ฎ์„๊นŒ? 

2. ๋ฐฉ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์€ ๊ณณ์˜ ์ง‘๊ฐ’์€ ๋†’์„๊นŒ? 

3. ์ผ์‚ฐํ™”์งˆ์†Œ ๋†๋„๊ฐ€ ๋†’์„์ˆ˜๋ก ์ง‘๊ฐ’์€ ๋‚ฎ์„๊นŒ? 

4. ์žฌ์‚ฐ์„ธ์œจ์ด ๋†’์„์ˆ˜๋ก ์ง‘๊ฐ’์„ ๋†’์„๊นŒ?

 

1. ๋ฒ”์ฃ„์œจ์ด ๋†’์€ ๊ณณ์˜ ์ง‘๊ฐ’์€ ๋‚ฎ์„๊นŒ? 

sns.jointplot(data=data, x='crim', y='medv', kind='reg')

๊ทน๋‹จ์ ์ธ ์Œ์˜ ๊ด€๊ณ„๋Š” ์•„๋‹ˆ์ง€๋งŒ , ๋ฒ”์ฃ„์œจ์ด ๋†’์•„์งˆ ์ˆ˜๋ก ์ง‘๊ฐ’์ด ๋‚ฎ์•„์ง€๋Š” ์ถ”์„ธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

 

- ๊ณต๋ถ„์‚ฐ

data['crim'].cov(data['medv'])

์Œ์˜ ๊ด€๊ณ„๋ฅผ ๊ฐ–๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

 

- ์ƒ๊ด€๊ณ„์ˆ˜ 

data['crim'].corr(data['medv'])    # ํ”ผ์–ด์Šจ์ƒ๊ด€๊ณ„์ˆ˜ 0.3 ~ 0.6 ๊ฐ•ํ•œ ์ƒ๊ด€๊ณ„์ˆ˜


r์ด -1.0๊ณผ -0.7 ์‚ฌ์ด์ด๋ฉด, ๊ฐ•ํ•œ ์Œ์  ์„ ํ˜•๊ด€๊ณ„,

r์ด -0.7๊ณผ -0.3 ์‚ฌ์ด์ด๋ฉด, ๋šœ๋ ทํ•œ ์Œ์  ์„ ํ˜•๊ด€๊ณ„,

r์ด -0.3๊ณผ -0.1 ์‚ฌ์ด์ด๋ฉด, ์•ฝํ•œ ์Œ์  ์„ ํ˜•๊ด€๊ณ„,

r์ด -0.1๊ณผ +0.1 ์‚ฌ์ด์ด๋ฉด, ๊ฑฐ์˜ ๋ฌด์‹œ๋  ์ˆ˜ ์žˆ๋Š” ์„ ํ˜•๊ด€๊ณ„,

r์ด +0.1๊ณผ +0.3 ์‚ฌ์ด์ด๋ฉด, ์•ฝํ•œ ์–‘์  ์„ ํ˜•๊ด€๊ณ„,

r์ด +0.3๊ณผ +0.7 ์‚ฌ์ด์ด๋ฉด, ๋šœ๋ ทํ•œ ์–‘์  ์„ ํ˜•๊ด€๊ณ„,

r์ด +0.7๊ณผ +1.0 ์‚ฌ์ด์ด๋ฉด, ๊ฐ•ํ•œ ์–‘์  ์„ ํ˜•๊ด€๊ณ„

 

์ถœ์ฒ˜ - https://ko.wikipedia.org/wiki/%EC%83%81%EA%B4%80_%EB%B6%84%EC%84%9D


์œ„์™€ ๊ฐ™์€ ํ”ผ์–ด์Šจ ์ƒ๊ด€๊ณ„์ˆ˜ ํ•ด์„์„ ๋ณด์•˜์„ ๋•Œ ๋ฒ”์ฃ„์œจ๊ณผ ์ง‘๊ฐ’์€ ๋šœ๋ ทํ•œ ์Œ์  ์„ ํ˜•๊ด€๊ณ„๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

[ ๊ฐ€์„ค1 : True ] 

 

 

2. ๋ฐฉ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์€ ๊ณณ์˜ ์ง‘๊ฐ’์€ ๋†’์„๊นŒ? 

sns.jointplot(data=data, x='rm', y='medv', kind='reg')

๊ทธ๋ž˜ํ”„๋ฅผ ๋ณด๋ฉด, ๋ฐฉ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์ง‘๊ฐ’์ด ๋†’์•„์ง€๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

- ๊ณต๋ถ„์‚ฐ

data['rm'].cov(data['medv'])

๊ณต๋ถ„์‚ฐ์„ ๋ณด์•˜์„ ๋•Œ ์–‘์˜ ๊ด€๊ณ„๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

 

- ์ƒ๊ด€๊ณ„์ˆ˜ 

data['rm'].corr(data['medv'])

์ƒ๊ด€๊ณ„์ˆ˜๋ฅผ ๋ณด๋‹ˆ ๊ฐ•ํ•œ ์–‘์  ์„ ํ˜•๊ด€๊ณ„์— ๊ฐ€๊นŒ์šด ๋šœ๋ ทํ•œ ์–‘์  ์„ ํ˜•๊ด€๊ณ„๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ณต๋ถ„์‚ฐ์˜ ํ—ˆ์ ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€์„ค2์˜ ์ƒ๊ด€๊ณ„์ˆ˜๋Š” ๊ฐ€์„ค1์—์„œ ์ƒ๊ด€๊ณ„์ˆ˜๋ณด๋‹ค ๋” ๋šœ๋ ทํ•œ ๊ด€๊ณ„์ด์ง€๋งŒ, ๊ณต๋ถ„์‚ฐ์€ ๊ฐ€์„ค2๊ฐ€ ๋” ๋†’๋‹ค. 

 

[ ๊ฐ€์„ค2 : True ] 

 

 

3. ์ผ์‚ฐํ™”์งˆ์†Œ ๋†๋„๊ฐ€ ๋†’์„์ˆ˜๋ก ์ง‘๊ฐ’์€ ๋‚ฎ์„๊นŒ?

sns.jointplot(data=data, x='nox', y='medv', kind='reg')

data['nox'].corr(data['medv'])

-0.4273207723732824

๋šœ๋ ทํ•œ ์Œ์  ์ƒ๊ด€๊ด€๊ณ„์ธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ผ์‚ฐํ™”์งˆ์†Œ ๋†๋„๊ฐ€ ๋†’์„ ์ˆ˜๋ก ์ง‘๊ฐ’์€ ๋‚ฎ์•„์ง€๋Š” ๊ฒฝํ–ฅ์„ ๋ณด์ธ๋‹ค.

 

[ ๊ฐ€์„ค3 : True ] 

 

 

4. ์žฌ์‚ฐ์„ธ์œจ์ด ๋†’์„์ˆ˜๋ก ์ง‘๊ฐ’์„ ๋†’์„๊นŒ?

sns.jointplot(data=data, x='tax', y='medv', kind='reg')

data['tax'].corr(data['medv'])

-0.46853593356776696

๋šœ๋ ทํ•œ ์Œ์ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ณ , ์žฌ์‚ฐ์„ธ์œจ์ด ๋†’์„์ˆ˜๋ก ์ง‘๊ฐ’์ด ๋‚ฎ์•„์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

[ ๊ฐ€์„ค4 : False ] 

 

 

- ๋ชจ๋“ ๋ฐ์ดํ„ฐ์˜ ์ƒ๊ด€๊ณ„์ˆ˜ ์•Œ๊ธฐ - heatmap 

plt.figure(figsize=(10, 7))
sns.heatmap(data.corr(), cmap='RdBu_r', annot=True, fmt='0.1f')

lstat์™€ rm ์˜ ์ง‘๊ฐ’๊ณผ์˜ ์ƒ๊ด€๊ณ„์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.  ์ธ๊ตฌ ์ค‘ ํ•˜์œ„ ๊ณ„์ธต ๋น„์œจ(lstat)์™€๋Š” ์Œ์˜ ์ƒ๊ด€๊ด€๊ณ„, ๋ฐฉ์˜ ๊ฐœ์ˆ˜(rm) ๊ณผ๋Š” ์–‘์˜ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ๋ˆ๋‹ค. ๋ฐ˜๋ฉด dis(์ง์—…์„ผํ„ฐ์˜ ๊ฑฐ๋ฆฌ), b(์ธ๊ตฌ ์ค‘ ํ‘์ธ ๋น„์œจ) ์™€ ์ง‘๊ฐ’์€ ๋‚ฎ์€ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ๋ณด์ธ๋‹ค. 

 

 

 

 

 


 Feature Extraction 

- ์ƒ๊ด€๊ด€๊ณ„ ๋น„๊ตํ•˜์—ฌ ๋ช‡๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ๋ช‡๊ฐœ๋กœ ์ค„์ผ ๊ฒƒ์ธ์ง€ ๊ฒฐ์ • 

corr_bar = []

for column in data.columns:
    print(f"{column}๊ณผ ์ง‘๊ฐ’์˜ ์ƒ๊ด€๊ด€๊ณ„: {data[column].corr(data['medv'])}")
    corr_bar.append(abs(data[column].corr(data['medv'])))

๊ฐ ์ปฌ๋Ÿผ๋ณ„ ์ง‘๊ฐ‘๊ณผ์˜ ์ƒ๊ด€๊ณ„์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๊ณ , corr_bar ๋ฆฌ์ŠคํŠธ์—๋Š” ์ ˆ๋Œ“๊ฐ’์„ ์ทจํ•˜์—ฌ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. 

corr_bar

sns.barplot(data.columns, corr_bar)

๋ง‰๋Œ€๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ ค๋ณด๋‹ˆ dis, b ๊ฐ€ ๋‹ค๋ฅธ ์ปฌ๋Ÿผ๋“ค๋ณด๋‹ค ์ƒ๊ด€๊ณ„์ˆ˜๊ฐ€ ์ž‘์€ ๊ฒƒ์„ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

x = data[['dis', 'b']]

data์—์„œ ๋‘ ๋ณ€์ˆ˜๋ฅผ ์„ ํƒํ•˜์—ฌ x์— ์ €์žฅํ•œ๋‹ค. 

x.head()

 

PCA ์‚ฌ์šฉ 

from sklearn.decomposition import PCA

PCA(n_components)

  • n_components : ๋ช‡๊ฐ€์ง€์˜ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์ง€ ๊ฐœ์ˆ˜๋ฅผ ์ •ํ•œ๋‹ค.
  • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฐœ๋…

PCA.fit(x)

  • x์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•™์Šต์‹œํ‚ด์œผ๋กœ์จ ์•ž์—์„œ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต๋ถ€ํ•˜๋Š” ๊ฐœ๋…

PCA.components_

  • ์•ž์„œ ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ณ€์ˆ˜์†์— ๋‹ด๊ธด ์ด ์ „ ๋ณ€์ˆ˜์˜ ๋ถ„์‚ฐ์ด ๋‹ด๊ธด ์ •๋„

PCA.explained_variance_ratio_

  • ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๊ฐ€ ์„ค๋ช…ํ•˜๋Š” ๋ถ„์‚ฐ์˜ ๋น„์œจ

PCA.transform

  • ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ํ•™์Šต๊ธฐ๋กœ x์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜

 

- 2๊ฐœ์˜ ๋ณ€์ˆ˜ -> 1๊ฐœ์˜ ๋ณ€์ˆ˜ 

pca = PCA(n_components=1)

n_components ์— ์ƒ์„ฑํ•  ๋ณ€์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ค€๋‹ค. 

pca.fit(x)

๋ฐ์ดํ„ฐ๋ฅผ ํ•™์Šตํ‚จ๋‹ค. 

pca.components_

์ƒˆ๋กœ์šด ๋ณ€์ˆ˜์— ๋‹ด๊ธด ๊ฐ ๋ณ€์ˆ˜์˜ ๋ถ„์‚ฐ์„ ํ™•์ธํ•ด ๋ณธ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์˜ค๋ฅธ์ชฝ (b) ์˜ ๋ถ„์‚ฐ์ด ๋„ˆ๋ฌด ํฌ๋‹ค. ์ด๋Š” ์˜ค๋ฅธ์ชฝ ๋ณ€์ˆ˜์˜ ์ •๋ณด๋งŒ ๋งŽ์ด ๋‹ด๊ฒผ๋‹ค๊ณ  ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค. ( -> ์ •๊ทœํ™”๊ฐ€ ํ•„์š”ํ•œ ์ด์œ  / ๋’ค์—์„œ ํ•™์Šต ) 

pca.explained_variance_ratio_

์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๊ฐ€ ์„ค๋ช…ํ•˜๋Š” ๋ถ„์‚ฐ์˜ ๋น„์œจ์ด๋‹ค. 

data['pc1'] = pca.transform(x)

ํ•™์Šต์‹œํ‚จ pca๋ฅผ ์ด์šฉํ•˜์—ฌ x์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ data์˜ pc1์ด๋ผ๋Š” ์ปฌ๋Ÿผ์— ์ถ”๊ฐ€ํ•œ๋‹ค. 

data

์ถ”๊ฐ€ ์™„๋ฃŒ๋œ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„. 

sns.jointplot(data=data, x='pc1', y='medv', kind='reg')

data['pc1'].corr(data['medv'])

์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ๊ณผ ์ง‘๊ฐ’์˜ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ๋ณด๋ฉด ์ „์— b๋ณ€์ˆ˜์˜ ์ƒ๊ด€๊ณ„์ˆ˜์™€ ๋ณ„ ์ฐจ์ด๊ฐ€ ์—†๋‹ค. ์ •๊ทœํ™”๋ฅผ ์ง„ํ–‰ํ•˜์—ฌ ๋‹ค์‹œ ํ•™์Šตํ•ด ๋ณด์ž. 

 

์ •๊ทœํ™”

from sklearn.preprocessing import StandardScaler

StandardScaler()

  • ์ •๊ทœํ™” ๊ฐ์ฒด ์ƒ์„ฑ

scaler.fit(x)

  • ์ •๊ทœํ™” ๊ฐ์ฒด๋กœ ํ•™์Šต

scaler.transform(x)

  • ํ•™์Šต๋œ ํ•™์Šต๊ธฐ๋กœ ๋ณ€์ˆ˜ x์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜

 

scaler = StandardScaler()

์ •๊ทœํ™” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 

scaler.fit(x)
scaler_x = scaler.transform(x)

x๋ฐ์ดํ„ฐ๋ฅผ ํ•™์Šต์‹œํ‚จ ํ›„, ์ •๊ทœํ™” ๋œ x๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•˜์—ฌ scaler_x ์— ์ €์žฅํ•ด์ค€๋‹ค. 

scaler_x

 

 

- ์ •๊ทœํ™”๋œ ๋ฐ์ดํ„ฐ๋กœ pca ์‹คํ–‰ 

# ๋ณ€์ˆ˜ 1๊ฐœ๋กœ ์„ค์ • 
pca = PCA(n_components=1)
# ๋ฐ์ดํ„ฐ๋ฅผ ํ•™์Šต
pca.fit(scaler_x)
# ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜์— ๋‹ด๊ธด ๊ฐ ๋ณ€์ˆ˜์˜ ๋ถ„์‚ฐ์„ ํ™•์ธ
# ์œ„์™€ ๋‹ฌ๋ผ์ง„ ๋ถ„์‚ฐ์˜ ์ •๋„๋ฅผ ํ™•์ธ
pca.components_

์ •๊ทœํ™”๋œ ๋ฐ์ดํ„ฐ๋กœ pca๋ฅผ ์ง„ํ–‰ํ•˜๋‹ˆ ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜์— ๋‘๊ฐ€์ง€์˜ ๋ณ€์ˆ˜์˜ ๋ถ„์‚ฐ์ด ๋™์ผํ•˜๊ฒŒ ๋‹ด๊ธด ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

pca.explained_variance_ratio_

์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๊ฐ€ ์„ค๋ช…ํ•˜๋Š” ๋ถ„์‚ฐ์˜ ๋น„์œจ์€ ์ค„์–ด๋“ค์—ˆ์ง€๋งŒ , ๋‘๊ฐ€์ง€ ๋ณ€์ˆ˜์˜ ๊ฐ ๋ถ„์‚ฐ์ด ๋™์ผํ•˜๊ฒŒ ๋‹ด๊ธด๊ฒƒ์ด ๋” ์ค‘์š”ํ•˜๋‹ค. 

data['pc1'] = pca.transform(scaler_x)
data.head()

์ •๊ทœํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ pca ๋ณ€ํ™˜ํ•˜์—ฌ pc1 ์ปฌ๋Ÿผ์— ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค. 

 

 

- ์ƒ๊ด€๊ณ„์ˆ˜ ๋น„๊ต

sns.jointplot(data=data, x=data['pc1'], y=data['medv'], kind='reg')

data['pc1'].corr(data['medv'])

data['b'].corr(data['medv'])

์ด์ฒ˜๋Ÿผ ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜ pc1๊ณผ ์ง‘๊ฐ’์˜ ์ƒ๊ด€๊ณ„์ˆ˜๊ฐ€ ์˜ˆ์ „ ๋‘ ๋ณ€์ˆ˜์˜ ์ƒ๊ด€๊ณ„์ˆ˜๋ณด๋‹ค ๋” ๋†’์•„์ง„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 


์ƒ๊ด€์„ฑ์ด ์—†๋Š” ๋‘ ๊ฐ€์ง€์˜ ๋ณ€์ˆ˜๋ฅผ ์ƒ๊ด€์„ฑ์ด ๋” ๋†’์•„์ง€๋„๋ก ํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” pca๋ฅผ ํ•™์Šตํ•˜์˜€๋‹ค. ๋‹ค์Œ์‹œ๊ฐ„์—๋Š” ์˜ค๋Š˜ ํ•™์Šตํ•œ pca๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฐจ์›์„ ์ถ•์†Œํ•˜๊ณ , ๊ตฐ์ง‘ํ™”, ์‹œ๊ฐํ™”๋ฅผ ํ•˜๋Š” ์‹ค์Šต์„ ํ•œ๋‹ค. 


 

 

 

+ Recent posts