profile-img
The merit of an action lies in finishing it to the end.
slide-image

๋ฐ์ดํ„ฐ์˜ ์ข…๋ฅ˜

๋ฐ์ดํ„ฐ๋Š” ํฌ๊ฒŒ ๋ฒ”์ฃผํ˜•, ์ˆ˜์น˜ํ˜• ๋‘ ๊ฐ€์ง€ ๋ถ„๋ฅ˜๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฒ”์ฃผํ˜• ๋ฐ์ดํ„ฐ๋Š” ๋ฒ”์ฃผ/์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฐ๊ฐ์˜ ์ด๋ฆ„์„ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ ์ข…๋ฅ˜๋‹ค.

ex) ์„ฑ๋ณ„ - ์—ฌ์„ฑ, ๋‚จ์„ฑ / ํ•™๋ ฅ - ์ดˆ์กธ, ์ค‘์กธ, ๋Œ€์กธ, ๋Œ€ํ•™์›์กธ / ์ถœ์‹  ํ•™๊ต - ๊ณ ๋ ค๋Œ€ํ•™๊ต, ์—ฐ์„ธ๋Œ€ํ•™๊ต, ...

๋ฐ˜๋ฉด ์ˆ˜์น˜ํ˜• ๋ฐ์ดํ„ฐ๋Š” ๋ง๊ทธ๋Œ€๋กœ ์ˆซ์ž๋กœ ํ‘œ์‹œ๋˜๋Š” ์ž๋ฃŒ๋“ค์ด๋‹ค.

ex) ๋‚˜์ด - 1์‚ด, 2์‚ด, ... / ํ‚ค - 160cm, 161cm, ... / ๋ชธ๋ฌด๊ฒŒ - 50kg, 51kg, ...

 

๋ฒ”์ฃผํ˜• ๋ฐ์ดํ„ฐ(์งˆ์  ์ž๋ฃŒ)

๋ฒ”์ฃผํ˜• ๋ฐ์ดํ„ฐ๋Š” ๋˜ ์ˆœ์œ„ํ˜•, ๋ช…๋ชฉํ˜•์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ํ•˜์œ„ ๋ถ„๋ฅ˜๋กœ ๋‹ค์‹œ ๋‚˜๋ˆ„์–ด์ง„๋‹ค.

 

์ˆœ์œ„ํ˜• ๋ฐ์ดํ„ฐ๋Š” ๊ฐ ๋ฐ์ดํ„ฐ๋ณ„๋กœ ์ˆœ์œ„๊ฐ€ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋งŒ์กฑ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด, 5์ ๊ณผ 1์ ์€ ๋™๋“ฑํ•œ ์ž๊ฒฉ์„ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๋‹ค. ๋ณดํ†ต 5์ ์ด 1์ ๋ณด๋‹ค ๋” ๋†’์€ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋งŒ์กฑ๋„ ๋ฐ์ดํ„ฐ๋Š” ์ˆœ์œ„ํ˜• ๋ฐ์ดํ„ฐ์ด๋‹ค.

๋ช…๋ชฉํ˜• ๋ฐ์ดํ„ฐ๋Š” ๋ฐ˜๋Œ€๋กœ ๊ฐ ๋ฐ์ดํ„ฐ๋ณ„ ์ˆœ์œ„๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ์ด๋‹ค.

์„ฑ๋ณ„ ๋ฐ์ดํ„ฐ๋Š” ์—ฌ์„ฑ๊ณผ ๋‚จ์„ฑ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š”๋ฐ ๋‘˜ ์‚ฌ์ด์˜ ์ˆœ์œ„๋ฅผ ๋งค๊ธธ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ช…๋ชฉํ˜• ๋ฐ์ดํ„ฐ์ด๋‹ค.

 

์ˆ˜์น˜ํ˜• ๋ฐ์ดํ„ฐ(์–‘์  ์ž๋ฃŒ)

์ˆ˜์น˜ํ˜• ๋ฐ์ดํ„ฐ ์—ญ์‹œ ์ด์‚ฐํ˜•, ์—ฐ์†ํ˜•์ด๋ผ๋Š” ๋‘ ํ•˜์œ„ ๋ถ„๋ฅ˜๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

 

์ด์‚ฐํ˜• ๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฐ์ดํ„ฐ ์‚ฌ์ด์— ๋Š์–ด์ง์ด ์žˆ๋‹ค.

๋ฌผ๊ฑด์˜ ๊ฐœ์ˆ˜์™€ ๊ฐ™์€ ์˜ˆ์‹œ๋ฅผ ๋“ค ์ˆ˜ ์žˆ๋‹ค. 1๊ฐœ์™€ 2๊ฐœ ์‚ฌ์ด์ธ ๊ฐœ์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ฌผ๊ฑด์˜ ๊ฐœ์ˆ˜๋Š” ์ด์‚ฐํ˜• ๋ฐ์ดํ„ฐ์ด๋‹ค.

๋ฐ˜๋ฉด ์—ฐ์†ํ˜• ๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฐ์ดํ„ฐ ์‚ฌ์ด์— ๋Š์–ด์ง์ด ์—†๋‹ค.

ํ‚ค๋Š” 160cm์™€ 161cm ์‚ฌ์ด์— ๋ฌด์ˆ˜ํžˆ ๋งŽ์€ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์—ฐ์†์ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋”ฐ๋ผ์„œ ์—ฐ์†ํ˜• ๋ฐ์ดํ„ฐ์— ํ•ด๋‹นํ•œ๋‹ค.

 

๋ฒ”์ฃผํ˜• ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”

๋ฒ”์ฃผํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ seaborn, matplotlib์„ ์ด์šฉํ•œ๋‹ค.

import seaborn as sns
import matplotlib.pyplot as plt

data.csv
0.00MB

์ƒ๋‹จ์˜ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

 

1) ๋ฒ”์ฃผํ˜• ๋ณ€์ˆ˜ 1๊ฐœ

๋ฒ”์ฃผํ˜• ๋ณ€์ˆ˜๋ฅผ ์‹œ๊ฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ง‰๋Œ€๊ทธ๋ž˜ํ”„๋‚˜ ์›๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

๋ง‰๋Œ€๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ์šฐ pandas์˜ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ธ plot.bar()๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

image = df['grade'].value_counts().plot.bar()
grade ๋ณ€์ˆ˜๋Š” 1, 2, 3, 4, 5๋“ฑ๊ธ‰ ์ค‘ ํ•˜๋‚˜์˜ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค. ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„๊ฐ€ ๋„์ถœ๋œ๋‹ค.

๋ง‰๋Œ€๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์—๋Š” seaborn์˜ ์นด์šดํŠธ๋„ํ‘œ sns.countplot()์ด ์žˆ๋‹ค.

sns.countplot(x = 'grade', data = df)

์›๊ทธ๋ž˜ํ”„๋Š” plt.pie()๋ฅผ ์ด์šฉํ•œ๋‹ค.

plt.pie(x = df['grade'].value_counts(), labels = [1, 2, 3, 4, 5], autopct='%.1f%%')

 

2) ๋ฒ”์ฃผํ˜• ๋ณ€์ˆ˜ + ์ˆ˜์น˜ํ˜• ๋ณ€์ˆ˜ ์‹œ๊ฐํ™”

โ‘  sns.lineplot(): ๋ช…๋ชฉํ˜• + ์ˆ˜์น˜ํ˜•(์—ฐ์†ํ˜• + ์ด์‚ฐํ˜•)

โ‘ก sns.scatterplot(): ๋ช…๋ชฉํ˜• + ์ˆ˜์น˜ํ˜•(์—ฐ์†ํ˜• + ์—ฐ์†ํ˜•)

โ‘ข sns.barplot(): ๋ช…๋ชฉํ˜• + ์—ฐ์†ํ˜•

โ‘ฃ sns.pointplot(): ๋ช…๋ชฉํ˜• + ์—ฐ์†ํ˜•

โ‘ค sns.boxplot(): ๋ช…๋ชฉํ˜• + ์—ฐ์†ํ˜• 

โ‘ฅ sns.violinplot(): ๋ช…๋ชฉํ˜• + ์—ฐ์†ํ˜•

๊ต‰์žฅํžˆ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์‹œ๊ฐํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋•Œ์— ๋”ฐ๋ผ ์ ์ ˆํ•˜๊ฒŒ ์‹œ๊ฐํ™” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฅด๋ฉด ๋œ๋‹ค.

์ด์ค‘์—์„œ scatterplot์„ ํ•œ ๋ฒˆ ๊ทธ๋ ค๋ณด์ž.

sns.scatterplot(x = 'weight', y = 'height', data = df, hue = 'grade')

weight์™€ height ์‚ฌ์ด์˜ scatterplot์„ ๊ทธ๋ ธ์ง€๋งŒ, hue๋ฅผ ํ†ตํ•ด grade๋ณ„๋กœ ๋‹ค๋ฅด๊ฒŒ ํ‘œ์‹œํ•˜์˜€๋‹ค.

grade๋Š” ๋ฒ”์ฃผํ˜• ๋ณ€์ˆ˜์ด๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ˆ˜์น˜ํ˜•์ด๋ฏ€๋กœ ๋ฒ”์ฃผํ˜•, ์ˆ˜์น˜ํ˜• ์‚ฌ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

 

์ˆ˜์น˜ํ˜• ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”

1) ์ˆ˜์น˜ํ˜• ๋ณ€์ˆ˜ 1๊ฐœ

ํžˆ์Šคํ† ๊ทธ๋žจ์„ ๊ทธ๋ ค์„œ ์ˆ˜์น˜ํ˜• ๋ณ€์ˆ˜๋ฅผ ์‹œ๊ฐํ™”ํ•ด๋ณด์ž. plt.hist()๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

plt.hist(df['height'])

๊ตฌ๊ฐ„์˜ ๊ฐœ์ˆ˜๋Š” hist์˜ ์ธ์ž์ธ bins์— ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

ํžˆ์Šคํ† ๊ทธ๋žจ์— ํ™•๋ฅ ๋ฐ€๋„ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค. sns.displot()๋ฅผ ์ด์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

sns.distplot(df['weight'])

sns.boxplot()์„ ํ†ตํ•ด ๋ฐ•์Šคํ”Œ๋กฏ์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค. min, max, Q1, Q2, Q3, outlier๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

plt.figure(figsize = (6, 8))
sns.boxplot(y = 'weight', data = df)
plt.show()

 

2) ์ˆ˜์น˜ํ˜• ๋ณ€์ˆ˜ 2๊ฐœ

โ‘  sns.lineplot(): ์—ฐ์†ํ˜• + ์ด์‚ฐํ˜•

โ‘ก sns.scatterplot(): ์—ฐ์†ํ˜• + ์—ฐ์†ํ˜•

โ‘ข sns.regplot(): ์—ฐ์†ํ˜•+ ์—ฐ์†ํ˜•

๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์‹œ๊ฐํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ ์‹œ๊ฐํ™”๋ฅผ ํ–ˆ์„ ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ์ž˜ ๋“œ๋Ÿฌ๋‚˜๋Š”์ง€๋Š” ์—ฐ์Šตํ•ด๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

 

๋”๋ณด๊ธฐ
'CS study/๊ธฐํƒ€' Related Articles +

์„ ํ˜• ํšŒ๊ท€ (Linear Regression) ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

ํšŒ๊ท€๋ž€ x๊ฐ’์— ๋Œ€์‘ํ•˜๋Š” y๊ฐ’๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐ’(y hat)๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์ด๋‹ค. ์—ฌ๊ธฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์„ ํ˜• ํ•จ์ˆ˜๋ผ๋ฉด ์„ ํ˜•ํšŒ๊ท€๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์„ ํ˜•ํšŒ๊ท€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๊ทธ ๋‹จ์ˆœํ•จ์— ์žˆ๋‹ค. ๊ฐ ํ”ผ์ณ์˜ ๊ณ„์ˆ˜์™€ ๋ชฉํ‘œํ•˜๋Š” ๋ณ€์ˆ˜ ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ๋ณด๋‹ค ๋” ์ง๊ด€์ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์„ ํ˜• ํšŒ๊ท€์˜ ์ข…๋ฅ˜

- ๋‹จ์ˆœ ์„ ํ˜• ํšŒ๊ท€

ํ”ผ์ณ(x)๊ฐ€ ํ•˜๋‚˜๋ฟ์ธ ๋ชจ๋ธ์ด๊ณ  ๋ชฉํ‘œ ๋ณ€์ˆ˜์™€ ํ”ผ์ณ๊ฐ€ ๊ฐ™์€ ์ขŒํ‘œํ‰๋ฉด์— ๋‚˜ํƒ€๋‚˜๋Š” ์ง์„  ํ˜•ํƒœ์ด๋‹ค. ๋‹จ์ˆœ ์„ ํ˜• ํšŒ๊ท€๋Š” ์„ ํ˜• ์‚ฌ์ƒ์— ๋ถ€ํ•ฉํ•œ๋‹ค. 

 

- ๋‹ค์ค‘ ์„ ํ˜• ํšŒ๊ท€

ํ”ผ์ณ(x)๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๋ชจ๋ธ๋กœ ๋‹ค์ฐจ์› ๊ณต๊ฐ„์—์„œ ์กด์žฌํ•˜๋Š” ์ง์„ ์˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„๋œ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„ ํ˜• ์‚ฌ์ƒ์— ๋ถ€ํ•ฉํ•œ๋‹ค.

 

- ๋‹คํ•ญ ํšŒ๊ท€ (Polynomial)

ํ”ผ์ณ๋Š” 1๊ฐœ๋ฟ์ด์ง€๋งŒ ๋‹คํ•ญ์‹์˜ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚˜๋ฏ€๋กœ ๊ณก์„ ์˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„๋œ๋‹ค. ๋‹คํ•ญ ํšŒ๊ท€์˜ ๊ฒฝ์šฐ ์ง€์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚  ๋•Œ๋งˆ๋‹ค ๊ธ‰๊ฒฉํžˆ ๋ณต์žกํ•ด์ง€๋ฏ€๋กœ ํšŒ๊ท€ ๋ชจ๋ธ์—์„œ ์˜ค๋ฒ„ํ”ผํŒ…(overfitting, ๊ณผ์ ํ•ฉ)์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค. 

 

๋น„์šฉํ•จ์ˆ˜

๋จธ์‹ ๋Ÿฌ๋‹์—์„œ๋Š” ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋ธ์— ํˆฌ์ž…ํ•จ์œผ๋กœ์จ ๋ชจ๋ธ์„ ์ ํ•ฉํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ํ•™์Šต๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค. ์ด๋•Œ ์ œ๋Œ€๋กœ ์ ํ•ฉ์ด ๋˜๋ ค๋ฉด ๋ชจ๋ธ์˜ ์˜ˆ์ธก๊ฐ’๊ณผ ์‹ค์ œ ๊ฐ’์„ ์ค„์—ฌ์•ผ ํ•œ๋‹ค. ๋ชจ๋ธ์˜ ์˜ˆ์ธก๊ฐ’๊ณผ ์‹ค์ œ ๊ฐ’์˜ ์ฐจ์ด๋ฅผ ๋น„๊ตํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋น„์šฉ(cost) ํ•จ์ˆ˜๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๋น„์šฉํ•จ์ˆ˜๋Š” ๋ชจ๋ธ์˜ ํŠน์„ฑ์— ๋งž๊ฒŒ ์˜ค์ฐจ๋ฅผ ์ธก์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, ๋ณดํ†ต ๋น„์šฉํ•จ์ˆ˜ ๊ฐ’์ด ์ž‘์„์ˆ˜๋ก ์˜ค์ฐจ๊ฐ€ ์ž‘์œผ๋ฉฐ ๋ชจ๋ธ์ด ์ž˜ ํ•™์Šต๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋น„์šฉํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹จ์ˆœ ์„ ํ˜• ํšŒ๊ท€ ๊ตฌํ˜„

sklearn (์‹ธ์ดํ‚ท๋Ÿฐ) ์„ ์ด์šฉํ•œ๋‹ค. ๋ชจ๋ธ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import PolynomialFeatures
from sklearn.metrics import r2_score, mean_squared_error

ํ•™์Šต, ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ์•ผ ํ•˜๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค.

X_train, X_test, y_train, y_test = train_test_split(x, y, test_size = 0.2, random_state = 156)

x, y๋Š” ๋ฐ์ดํ„ฐ์—์„œ ๋ถˆ๋Ÿฌ์˜จ ๊ฐ๊ฐ์˜ x, y ๊ฐ’๋“ค์ด๋‹ค.

test_size๋Š” ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ๋กœ ๋ถ„๋ฆฌํ•  ๋ฐ์ดํ„ฐ์˜ ๋น„์œจ์„ ์ง€์ •ํ•ด์ค€๋‹ค. random_state๋Š” ์•„๋ฌด ์ˆซ์ž๋‚˜ ์ ๋Š”๋‹ค.

๋ฐ์ดํ„ฐ์…‹๋“ค๋กœ ํ•™์Šต์„ ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

lr = LinearRegression(fit_intercept = True)
lr.fit(X_train, y_train)

fit_intercept๋ฅผ True๋กœ ์„ค์ •ํ•˜์—ฌ ๋‹จ์ˆœ ์„ ํ˜• ํšŒ๊ท€ ๋ชจ๋ธ์— b0๊ฐ’๋„ ํฌํ•จ์‹œํ‚จ๋‹ค.

์ดํ›„ lr.fit์„ ํ†ตํ•ด ํ•™์Šต์‹œํ‚จ๋‹ค.

lr.coef_ # b๊ฐ’๋“ค์˜ array
lr.coef_[0] # b1 ๊ฐ’์— ์ ‘๊ทผ
lr.intercept_ # b0 ๊ฐ’ (์ ˆํŽธ)์— ์ ‘๊ทผ

๋ชจ๋ธ์—์„œ coef_๋ฅผ ์ด์šฉํ•˜๋ฉด b๊ฐ’๋“ค์˜ array๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ณ , index๋ฅผ ์ง€์ •ํ•˜์—ฌ ๊ฐ๊ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, intercept_๋Š” ์ ˆํŽธ, ์ฆ‰ b0 ๊ฐ’์„ ์•Œ๋ ค์ฃผ๋Š” ๋ฉ”์„œ๋“œ๋‹ค.

y_train_pred = lr.predict(X_train)
y_test_pred = lr.predict(X_test)

train_r2 = r2_score(y_train, y_train_pred)
test_r2 = r2_score(y_test, y_test_pred)

lr.score(X_test, y_test)

predict ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•œ๋‹ค.

r2_score์•ˆ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์‹ค์ œ y๊ฐ’๊ณผ ๋ชจ๋ธ์ด ๋„์ถœํ•œ y hat ๊ฐ’์„ ๋ฐ›๋Š”๋‹ค. r2_score๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ’์ด ํด์ˆ˜๋ก ์ž˜ ์˜ˆ์ธกํ•˜์˜€๋‹ค๋Š” ๋œป์ด๋‹ค.

lr.score์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ๋„ test ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹คํ•ญ ํšŒ๊ท€ ๊ตฌํ˜„ - 2nd order Polynomial Regression

quad = PolynomialFeatures(degree = 2)
X_quad = quad.fit_transform(x)

quadratic regression์€ 2์ฐจ ๋‹คํ•ญ ํšŒ๊ท€๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

PolynomialFeatures๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ degree๋กœ ๋ฐ›๋Š”๋ฐ, ์—ฌ๊ธฐ์— ๋„ฃ์–ด์ฃผ๋Š” ์ˆซ์ž์— ๋”ฐ๋ผ์„œ ๋‹คํ•ญํšŒ๊ท€์˜ ์ฐจ์ˆ˜๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.

X_train, X_test, y_train, y_test = train_test_split(X_quad, y, random_state = 156)

plr = LinearRegression()
plr.fit(X_train, y_train)

y_train_pred = plr.predict(X_train)
y_test_pred = plr.predict(X_test)

plr.score(X_test, y_test)

train_test_split์„ ํ†ตํ•ด ํ•™์Šต, ๊ฒ€์ฆ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋ธ์— ํ•™์Šต์‹œํ‚จ๋‹ค. ๋‹ค์Œ์œผ๋กœ ๋ชจ๋ธ์ด ์–ผ๋งˆ๋‚˜ ์ ํ•ฉํ•œ์ง€ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ 3์ฐจ, 4์ฐจ ๋“ฑ์˜ ๋‹คํ•ญํšŒ๊ท€๋ฅผ ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ์œ„์—์„œ degree๊ฐ’๋งŒ ๋ณ€๊ฒฝ์‹œํ‚ค๊ณ  ๋‚˜๋จธ์ง€ ๊ณผ์ •์€ ๋˜‘๊ฐ™์ด ํ•˜๋ฉด ๋œ๋‹ค.

'CS study/๋จธ์‹ ๋Ÿฌ๋‹' Related Articles +

Heap์˜ ๊ฐœ๋…

ํž™์€ ํŠธ๋ฆฌ์˜ ์ผ์ข…์ธ๋ฐ, "complete tree"์ด๊ฑฐ๋‚˜ "nearly complete tree"์ด์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜๋กœ ๋‚˜๋‰œ๋‹ค.

max-heap์˜ ๊ฒฝ์šฐ ๊ฐ ๋…ธ๋“œ์˜ key ๊ฐ’์ด ์ž์‹ ๋…ธ๋“œ๋“ค์˜ key ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , min-heap์˜ ๊ฒฝ์šฐ ๊ฐ ๋…ธ๋“œ์˜ key ๊ฐ’์€ ์ž์‹ ๋…ธ๋“œ๋“ค์˜ key ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.

 

 

max-heap & min-heap

Heap์˜ ํŠน์„ฑ

max-heap์„ ๊ธฐ์ค€์œผ๋กœ ์‚ดํŽด๋ณด์ž. ํž™์˜ root๋Š” ํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ, root์˜ ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋„ ๊ฐ™์€ ํŠน์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค. ๋งŒ์•ฝ min-heap์ด๋ผ๋ฉด ํž™์˜ root๊ฐ€ ํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

๊ตฌํ˜„์€ ์ฃผ๋กœ linked list๋ณด๋‹ค๋Š” array๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

array๋กœ ๊ตฌํ˜„ํ•œ heap

๋…ธ๋“œ์™€ ์ž์‹ ๊ฐ„์˜ ๊ด€๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

index๊ฐ€ i์ธ ๋…ธ๋“œ๋ฅผ ์ƒ๊ฐํ•ด๋ณธ๋‹ค๋ฉด,

    • i๋ฒˆ์งธ ๋…ธ๋“œ ์™ผ์ชฝ ์ž์‹: 2i+1
    • i๋ฒˆ์งธ ๋…ธ๋“œ ์˜ค๋ฅธ์ชฝ ์ž์‹: 2i+2
    • i๋ฒˆ์งธ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ: floor((i-2)/2)
    • j๋ฒˆ์งธ ๋…ธ๋“œ๊ฐ€ ์™ผ์ชฝ ์ž์‹์ด๋ฉด, ์˜ค๋ฅธ์ชฝ ์ž์‹์€ j+1

 

Heap์˜ ์—ฐ์‚ฐ

Heap์—์„œ ์ž๋ฃŒ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ˆœํšŒ, ๊ฒ€์ƒ‰, ์ถœ๋ ฅ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ๋„ ์ž‘๋™ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค๋งŒ ํž™์€ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ, root์˜ key ๊ฐ’์ด ๊ฐ€์žฅ ํฌ๊ฑฐ๋‚˜ (max-heap) ์ž‘์•„์•ผ (min-heap) ํ•˜๊ณ  ๊ทธ ํŠน์„ฑ์ด ๋ชจ๋“  ์„œ๋ธŒํŠธ๋ฆฌ์— ๋Œ€ํ•ด์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์ •์˜ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ (nearly) complete tree๋ผ๋Š” ํŠน์„ฑ๋„ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค.

๋งŒ์•ฝ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋ฅผ ํ•œ ํ›„ ๊ทธ๋ƒฅ ๊ฐ€๋งŒํžˆ ๋‘”๋‹ค๋ฉด ํž™์˜ ์ •์˜๋ฅผ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” Reheap up / Reheap down ์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์„œ heap์˜ ๋ชจ์–‘์„ ์œ ์ง€ํ•˜๋„๋ก ํ•œ๋‹ค.

์ˆ˜๋„์ฝ”๋“œ์˜ ๊ฒฝ์šฐ, ์ˆœํšŒ, ๊ฒ€์ƒ‰, ์ถœ๋ ฅ ์ž์ฒด๋Š” ๊ธฐ์กด ํŠธ๋ฆฌ์—์„œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๋ฏ€๋กœ ๊ฑด๋„ˆ๋›ฐ๊ณ , ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ์˜ ๊ฒฝ์šฐ๋Š” ๊ฐ๊ฐ ํ•จ์ˆ˜์˜ ๋’ท๋ถ€๋ถ„์—์„œ Reheap up, Reheap downํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ๊ฑด๋„ˆ๋›ฐ๋„๋ก ํ•˜๊ฒ ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” Reheap Up ๋ฐ Reheap Down์— ๋Œ€ํ•ด์„œ๋งŒ ์†Œ๊ฐœํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

Reheap Up

์‚ฝ์ž… ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ๊ฐ™์ด ๋ถˆ๋Ÿฌ์™€์•ผ ํ•˜๋Š” ํ•จ์ˆ˜๋กœ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์‚ฝ์ž…๋œ ์š”์†Œ๋ฅผ ์œ„์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚ค๋ฉด์„œ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ์‚ฝ์ž… ์ž์ฒด๋Š” ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ ๋นˆ leaf node์— ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— heap์˜ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” node๋ฅผ ์ด๋™์‹œ์ผœ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

reheap up์ด ์ด๋ฃจ์–ด์ง€๋Š” ๋‹จ๊ณ„

์‚ฝ์ž…๋œ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ์™€ key ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ, ๋งŒ์•ฝ ์‚ฝ์ž…๋œ ๋…ธ๋“œ๊ฐ€ ๋ถ€๋ชจ ๋…ธ๋“œ์˜ key ๊ฐ’๋ณด๋‹ค ํฌ๋ฉด ์„œ๋กœ ์œ„์น˜๋ฅผ ๊ตํ™˜ํ•œ๋‹ค. ์ด ๊ณผ์ •์„ ๊ณ„์† ๋ฐ˜๋ณตํ•˜์—ฌ heap์˜ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€์‹œํ‚จ๋‹ค.

์ˆ˜๋„์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

void reheapUp (HEAP *heap, NODE *newNode) {
	if (newNode != root) {
		parent = parent->newNode;
		if (newNode->key > parent->key) {
			swap(newNode, parent);
			reheapUp(heap,parent);
		}
	}
}

 

Reheap Down

heap์€ nearly complete tree์ด๋ฏ€๋กœ root์„ ๋ฐ”๋กœ ์‚ญ์ œํ•˜๊ฒŒ ๋˜๋ฉด, heap์˜ ๊ตฌ์กฐ๊ฐ€ ์œ ์ง€๋˜์ง€ ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ last tree node์˜ ๊ฐ’์„ root๋กœ ์˜ฎ๊ธด ํ›„, root๋ฅผ ์•„๋ž˜๋กœ ์ด๋™์‹œ์ผœ์„œ heap์˜ ๋ฐฐ์—ด ํŠน์„ฑ(heap-ordering property)์ด ์ถฉ์กฑ๋˜๋„๋ก ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค.

root ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•  ๋•Œ, ๊ทธ๋ƒฅ ์‚ญ์ œํ•˜๊ฒŒ ๋˜๋ฉด heap์˜ ๊ตฌ์กฐ๊ฐ€ ๋ถ•๊ดด๋˜๋ฏ€๋กœ, ์ž์‹ ๋…ธ๋“œ ์ค‘ ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ์™€ ๊ฐ’์„ ๊ตํ™˜ํ•ด๊ฐ€๋ฉฐ heap ๊ตฌ์กฐ์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋กœ ์ด๋™์‹œํ‚จ ํ›„ ์‚ญ์ œํ•œ๋‹ค.

์ˆ˜๋„์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

void reheapDown (HEAP *heap, NODE *root, int last) {
	if (root->left) {
		int leftKey = root->left->key;
		if (root->right) {
			int rightKey = root->right->key;
		}
		else {
			int rightKey = NULL;
		}
	}
	if (leftKey > rightKey) {
		largeSubtree = root->left;
	}
	else {
		largeSubtree = root->right;
	}
	if (root->key < largeSubtree->key) {
		swap(root, largeSubtree);
		reheapDown(heap, largeSubtree, last);
	}
}

class & self

class(ํด๋ž˜์Šค)๋ž€, ๋ฐ์ดํ„ฐ์™€ ๊ธฐ๋Šฅ์ด ํ•จ๊ป˜ ๋ฌถ์—ฌ ์žˆ๋Š” ํ•˜๋‚˜์˜ ํ‹€์ด๋‹ค. ์ด ํ‹€์„ ์ด์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ object(๊ฐ์ฒด)๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ๊ฐ์ฒด๋Š” ๋…๋ฆฝ์ ์ด์–ด์„œ ์„œ๋กœ์—๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

 

์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด์ž.

ํด๋ž˜์Šค๋Š” ์ดˆ์ฝœ๋ฆฟ์„ ๋งŒ๋“œ๋Š” ํ‹€๊ณผ ๊ฐ™๋‹ค. ๋…น์€ ์ดˆ์ฝœ๋ฆฟ์„ ํ‹€์— ๋ถ€์–ด ์ดˆ์ฝœ๋ฆฟ์„ ๋ฌดํ•œ์ • ์ƒ์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ํ‹€๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฐ๊ฐ์˜ ์ดˆ์ฝœ๋ฆฟ์„ ๊ฐ์ฒด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

๊ฐ๊ฐ์˜ ์ดˆ์ฝœ๋ฆฟ์€ ๋…๋ฆฝ์ ์ด๋ฏ€๋กœ ์ดˆ์ฝœ๋ฆฟ์— ์–ด๋–ค ๋ฐ์ฝ”๋ ˆ์ด์…˜์„ ์˜ฌ๋ฆฌ๋”๋ผ๋„ ๋‹ค๋ฅธ ์ดˆ์ฝœ๋ฆฟ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

 

ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋…๋ฆฝ์ ์ธ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŽธ๋ฆฌํ•˜๋‹ค. ์ผ๊ธฐ์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์‚ฌ๋žŒ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ผ๊ธฐ์žฅ์„ ๋งŒ๋“ค์–ด์ค„ ๋•Œ ์ด๊ฑธ ์ผ์ผ์ด ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋ฉด ์‹œ๊ฐ„๋‚ญ๋น„, ๊ทธ๋ฆฌ๊ณ  ์ž์›๋‚ญ๋น„(!)์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

ํด๋ž˜์Šค์™€ ๊ฐ์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

class chocoMaker:
	pass
    
a = chocoMaker() # a ๊ฐ์ฒด ์ƒ์„ฑ
b = chocoMaker() # b ๊ฐ์ฒด ์ƒ์„ฑ

์•„์ง chocoMaker๋ผ๋Š” ํด๋ž˜์Šค์— ์•„๋ฌด ๊ฐ’์ด๋‚˜ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค.

ํด๋ž˜์Šค์— ํ•จ์ˆ˜๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

class chocoMaker:
    def decorate(self, color, type):
    	self.color = color
        self.type = type
        
a = chocoMaker()
a.decorate('white', 'sprinkle')

ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ํ•จ์ˆ˜๋Š” method(๋ฉ”์„œ๋“œ)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๋ฉ”์„œ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋Œ€๊ฐœ self๋ฅผ ์“ด๋‹ค. self์˜ ์—ญํ• ์€ ๊ฐ์ฒด ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์œ„์™€ ๊ฐ™์ด ๊ฐ์ฒด.๋ฉ”์„œ๋“œ(...) ์ด๋Ÿฐ ์‹์œผ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์˜€๋˜ self๋Š” ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ๊ฐ์ฒด.๋ฉ”์„œ๋“œ(...)์—์„œ ๊ฐ์ฒด๊ฐ€ self๋กœ ์ž๋™์œผ๋กœ ์ „๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋งŒ์•ฝ ์ด ๋ฐฉ๋ฒ•์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š๋Š”๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ด๋„ ๋œ๋‹ค.

a = chocoMaker()
chocoMaker.decorate(a, 'white', 'sprinkle')

decorate ๋ฉ”์„œ๋“œ์˜ ์ˆ˜ํ–‰๋ฌธ์„ ์‚ดํŽด๋ณด์ž.

a.decorate('white', 'sprinkle')๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด, a๋ผ๋Š” ๊ฐ์ฒด ๋‚ด๋ถ€์— color, type ๊ฐ์ฒด๋ณ€์ˆ˜๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , 'white', 'sprinkle'๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.

ํด๋ž˜์Šค๋กœ ๋งŒ๋“  ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ฐ์ฒด ๊ฐ„์—” ๋…๋ฆฝ์„ฑ์ด ๋ณด์žฅ๋˜๋ฏ€๋กœ, ํ•œ ๊ฐ์ฒด์˜ ๊ฐ์ฒด๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ˆ˜์ •ํ–ˆ๋‹ค๊ณ  ํ•˜์—ฌ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ๊ฐ์ฒด๋ณ€์ˆ˜ ๊ฐ’์ด ๋‹ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค.

 

init/์ƒ์„ฑ์ž

chocoMaker ํด๋ž˜์Šค์— ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋„ ์ถ”๊ฐ€ํ•ด๋ณด์ž.

class chocoMaker:
    def decorate(self, color, type):
    	self.color = color
        self.type = type
    def plate(self):
    	res = self.color + self.type
        return res

plate ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค. ์ด ์ƒํ™ฉ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

b = chocoMaker()
b.plate()

์ด์œ ๋Š” ์•ž์„œ ๋งŒ๋“ค์–ด๋‘์—ˆ๋˜ decorate ๋ฉ”์„œ๋“œ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ ๋Š” plate ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•˜์ง€๋งŒ decorate ์ˆ˜ํ–‰ ํ›„ plate๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋ฉด ๋ถˆํŽธํ•˜๋‹ค. ํ•œ ๋ฒˆ์— ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ?

์šฐ๋ฆฌ๋Š” ์ด๋Ÿด ๋•Œ ์ƒ์„ฑ์ž(constructor)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ƒ์„ฑ์ž๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. __init__์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

class chocoMaker:
    def __init__(self, color, type):
        self.color = color
        self.type = type
    def decorate(self, color, type):
    	self.color = color
        self.type = type
    def plate(self):
    	res = self.color + self.type
        return res

c = chocoMaker('pink', 'decopen')

c๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ, decorate๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ํ•„์š” ์—†์ด chocoMaker์™€ ํ•จ๊ป˜ ์›ํ•˜๋Š” ๊ฐ’์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ƒ์†

์ฝ”๋“œ๋ฅผ ์งœ๋‹ค ๋ณด๋ฉด ๊ฐ™์€ ์†์„ฑ์„ ๊ฐ–๋Š” ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒ‰๊น”๊ณผ ๋ฐ์ฝ”๋ ˆ์ด์…˜์˜ ์ข…๋ฅ˜๋งŒ์„ ๊ฐ–๋Š” chocoMaker ํด๋ž˜์Šค์—์„œ ๋ฐ์ฝ”๋ ˆ์ด์…˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•œ ํด๋ž˜์Šค๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ธฐ์กด์˜ chocoMaker ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“œ๋Š” ํŽธ์ด ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๋‹ค. ์ด๋Ÿด ๋•Œ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด super().__init__๋ฅผ ์ด์šฉํ•œ ์ƒ์†์ด๋‹ค.

class superChocoMaker(chocoMaker):
    def __init__(self, color, type, num): # num ์ถ”๊ฐ€
        super().__init__(color, type)
        self.num = num
        
    def superPlate(self): # ๊ธฐ์กด ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์†
        super().plate()

ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํด๋ž˜์Šค ์˜† ๊ด„ํ˜ธ ์•ˆ์— ์ƒ์†ํ•  ํด๋ž˜์Šค์˜ ์ด๋ฆ„์„ ์ ์–ด๋‘” ๋‹ค์Œ, super().__init__์˜ input์œผ๋กœ ์ƒ์†ํ•  ๊ธฐ์กด ํด๋ž˜์Šค์˜ ์š”์†Œ์˜ ์ด๋ฆ„์„ ์ ์–ด์ค€๋‹ค.

๋•Œ๋กœ๋Š” ์ƒˆ๋กœ ๋งŒ๋“  ํด๋ž˜์Šค์—์„œ ๊ธฐ์กด์˜ ๋ฉ”์„œ๋“œ์™€ ๊ฐ™์€ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ์—๋Š” ๊ทธ๋ƒฅ ์ƒ์†๋ฐ›์€ (์ƒˆ๋กœ ๋งŒ๋“ ) ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์‹œ ์ •์˜ํ•˜๋ฉด ๋œ๋‹ค.

๊ธฐ์กด ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์‹ถ์„ ๋•Œ๋Š” super().๋ฉ”์„œ๋“œ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค.

'CS study/ํŒŒ์ด์ฌ ๊ธฐ์ดˆ' Related Articles +
1 ยทยทยท 3 4 5 6