๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ต์œก/์ŠคํŒŒ๋ฅดํƒ€

[TIL] ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ AI 9๊ธฐ - 16ํšŒ

by gomdeng 2024. 12. 19.

๐Ÿถ ํ•™์Šต ๋ฒ”์œ„

  • ํ•™์Šต๋ฐ˜ ๊ณผ์ œ (ํŒŒ์ด์ฌ)
  • AI ์ˆ˜ํ•™ ๊ฐ•์ขŒ
  • ๋จธ์‹ ๋Ÿฌ๋‹ ํ•™์Šต

 

๐Ÿถ ๊ณต๋ถ€ ๋‚ด์šฉ

โœจ ํ•™์Šต๋ฐ˜ ๊ณผ์ œ - ํŒŒ์ด์ฌ ๋ฌธ์ œ (ํ•จ์ˆ˜)

โœ”๏ธ # ์ˆ™์ œ - 73
# 1000๊ฐœ ์ด์ƒ์˜ ์ˆซ์ž๋ฅผ ๋ฐ›์•„ ๋”ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜ ๋งŒ๋“œ์„ธ์š”
def add(*args):
    print(sum(args))

add(*range(1000))

# [Error Case]
# ---------------------
# def add(*args):
#     print(sum(args))
# 
# add(range(1000))
# ---------------------
# add() ํ˜ธ์ถœ๋ถ€์— add(range(1000)) ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋˜์งˆ ๊ฒฝ์šฐ,
# ๊ฐœ๋ณ„ ์ธ์ž ๊ฐ’์ด ์•„๋‹Œ ๊ฐ์ฒด ์ž์ฒด๊ฐ€ ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. (๊ทธ๋ž˜์„œ sum์—์„œ ์—๋Ÿฌ ๋ฐœ์ƒ)
# ์ด๋ฅผ ์•ž์— *๋ฅผ ๋ถ™์ž„์œผ๋กœ ์–ธํŒจํ‚น ํ›„, ์ฒ˜๋ฆฌํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋‹ค.
# 
# [๊ฒฐ๋ก ]
# *๋Š” Python์—์„œ ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋กœ, ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉ
# Iterable(์˜ˆ: ๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ, range)์˜ ์š”์†Œ๋ฅผ ํ’€์–ด์„œ ํ•จ์ˆ˜์— ์ „๋‹ฌ

โœ”๏ธ ์ˆ™์ œ - 78
# ๋ฌธ์ž์—ด์—์„œ ๋ชจ์Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
def count_vowels(s):
    vowels = "aeiouAEIOU"  # ๋Œ€์†Œ๋ฌธ์ž ๋ชจ์Œ ์ •์˜
    return sum(1 for char in s if char in vowels)

print(count_vowels("hello world"))

โœ”๏ธ ์ˆ™์ œ - 88
# ์ •์ˆ˜๋ฅผ ๋ฐ›์•„ ๊ทธ ์ •์ˆ˜์˜ ํŒฉํ† ๋ฆฌ์–ผ์„ ๊ณ„์‚ฐํ•˜๋Š” ์žฌ๊ท€ํ•จ์ˆ˜
def factorial(n):
    if n == 1:
        return 1
    return n * factorial(n-1)

factorial(3)

โœ”๏ธ ์ˆ™์ œ - 91
# ์ˆซ์ž ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ›์•„ ์žฌ๊ท€์ ์œผ๋กœ ์ตœ๋Œ€ ๊ฐ’์„ ์ฐพ๋Š” ํ•จ์ˆ˜
def lstMax(lst):
    if len(lst) == 0:
        return 0
    return max(lst[0], lstMax(lst[1:]))

lstMax([1, 5, 4, 3, 4])
for v in data.values():
    # isinstance :: ๊ฐ’์ด ์ˆซ์ž์ธ์ง€ ํ™•์ธ
    if isinstance(v, (int, float)): # ์ˆซ์ž์ด๋ฉด ๊ทธ๋Œ€๋กœ ๋”ํ•˜๊ธฐ
        answer += v
    else:
        answer += int(v)            # ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด ํ˜•๋ณ€ํ™˜

print(answer)

 

โœจ k-์ตœ๊ทผ์ ‘ ์ด์›ƒ ํšŒ๊ท€ ์‹ค์Šต

import matplotlib.pyplot as plt                         # ๋งทํ”Œ๋กฏ๋ฆฝ
import numpy as np                                      # ๋„˜ํŒŒ์ด
from sklearn.neighbors import KNeighborsRegressor       # k-์ตœ๊ทผ์ ‘ ์ด์›ƒ ํšŒ๊ท€ ๋ชจ๋ธ
from sklearn.model_selection import train_test_split    # ํ›ˆ๋ จ/ํ…Œ์ŠคํŠธ ๋ชจ๋ธ ์ƒ์„ฑ

# ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ (๊ธธ์ด)
perch_length = np.array([8.4, 13.7, 15.0, 16.2, 17.4, 18.0, 18.7, 19.0, 19.6, 20.0, 21.0,
       21.0, 21.0, 21.3, 22.0, 22.0, 22.0, 22.0, 22.0, 22.5, 22.5, 22.7,
       23.0, 23.5, 24.0, 24.0, 24.6, 25.0, 25.6, 26.5, 27.3, 27.5, 27.5,
       27.5, 28.0, 28.7, 30.0, 32.8, 34.5, 35.0, 36.5, 36.0, 37.0, 37.0,
       39.0, 39.0, 39.0, 40.0, 40.0, 40.0, 40.0, 42.0, 43.0, 43.0, 43.5,
       44.0])
# ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ (๋ฌด๊ฒŒ)
perch_weight = np.array([5.9, 32.0, 40.0, 51.5, 70.0, 100.0, 78.0, 80.0, 85.0, 85.0, 110.0,
       115.0, 125.0, 130.0, 120.0, 120.0, 130.0, 135.0, 110.0, 130.0,
       150.0, 145.0, 150.0, 170.0, 225.0, 145.0, 188.0, 180.0, 197.0,
       218.0, 300.0, 260.0, 265.0, 250.0, 250.0, 300.0, 320.0, 514.0,
       556.0, 840.0, 685.0, 700.0, 700.0, 690.0, 900.0, 650.0, 820.0,
       850.0, 900.0, 1015.0, 820.0, 1100.0, 1000.0, 1100.0, 1000.0,
       1000.0])
       
# ํ›ˆ๋ จ/ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ (ํƒ€๊ฒŸ ํฌํ•จ)
train_input, test_input, train_target, test_target = train_test_split(perch_length, perch_weight, random_state=42)
print(train_input.shape, test_input.shape)
print(train_target.shape, test_target.shape)

# ํ›ˆ๋ จ/ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ณ€๊ฒฝ (1์ฐจ์› → 2์ฐจ์›)
train_input = train_input.reshape(-1, 1)
test_input = test_input.reshape(-1, 1)
print(train_input.shape, test_input.shape)    

# k-์ตœ๊ทผ์ ‘ ์ด์›ƒ ๋ชจ๋ธ ์ƒ์„ฑ (์ด์›ƒ: 3์œผ๋กœ ์„ค์ •)
knr = KNeighborsRegressor(n_neighbors=3)

# ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ ํ•™์Šต
knr.fit(train_input, train_target)

# ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ํ‰๊ฐ€
print(knr.score(test_input, test_target)) # 0.9746459963987609

# ๋ฐ์ดํ„ฐ ์˜ˆ์ธก (50์œผ๋กœ ์˜ˆ์ธก)
print(knr.predict([[50]])) # 1033.33333333

# ์ด์›ƒ ๊ฑฐ๋ฆฌ ๋ฐ ์ธ๋ฑ์Šค ๊ตฌํ•˜๊ธฐ (3์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์Œ)
distances, indexes = knr.kneighbors([[50]])
print(distances) # [[6. 7. 7.]]
print(indexes) # [[34  8 14]]

# ์ด์›ƒ ์ƒ˜ํ”Œ์˜ ํƒ€๊นƒ์˜ ํ‰๊ท  (์˜ˆ์ธก๊ฐ’๊ณผ ๋™์ผํ•จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.)
print(np.mean(train_target[indexes])) # 1033.3333333333333

# ์‹œ๊ฐํ™” (๊ธธ์ด๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๋ฌด๊ฒŒ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒฝํ–ฅ ํ™•์ธ ๊ฐ€๋Šฅ)
plt.scatter(train_input, train_target)
plt.scatter(test_input, test_target)
plt.scatter(train_input[indexes], train_target[indexes], marker='D')
plt.scatter(50, 1033, marker='^')
plt.xlabel('length')
plt.ylabel('weight')
plt.show()

์‹ค์Šต์„ ํ•˜๋ฉด์„œ, ์ผ๋ฐ˜ ๋ชจ๋ธ๊ณผ ํšŒ๊ท€ ๋ชจ๋ธ์— ์ฐจ์ด์ ์„ ์ œ๋Œ€๋กœ ์ƒ๊ฐํ•˜์ง€ ์•Š๋‹ค๊ฐ€
์—„์ฒญ ๊ณ ์ƒ์„ ํ–ˆ๋‹ค. ๊ณต๋ถ€๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ, ์ด์ „์— ๋‚ด์šฉ์„ ๋ถ„๋ช…ํžˆ ์ธ์ง€ํ•˜๋ฉด์„œ ์™€์•ผ ๋˜๋Š”
์ค‘์š”์„ฑ์„ ํ•œ๋ฒˆ ๋” ๊นจ๋‹ฌ์œผ๋ฉฐ ์‹ค์Šต์„ ๋งˆ๋ฌด๋ฆฌ ํ•œ๋‹ค. 

 

 

๐Ÿถ ๋А๋‚€์ 

1. ๊ฐœ์ธ๊ณผ์ œ๊ฐ€ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ? (๐Ÿ’ฃ ๐Ÿ’ฃ )
2. ์ˆ˜ํ•™์„ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์‹œ์ž‘ํ•ด๋ด์•ผ๊ฒ ๋‹ค.. (์ˆ˜ํฌ์ž์˜ ์—…๋ณด.. ๐Ÿ’ฃ ๐Ÿ’ฃ ๐Ÿ’ฃ  )
3. ์œ ๋… ๋จธ๋ฆฌ์— ์•ˆ๋“ค์–ด์˜ค๋Š” ์˜ค๋Š˜.. (์•ˆ๋ผ์• ์• ์• ์• ์• ์•  ๐Ÿ’ฃ ๐Ÿ’ฃ ๐Ÿ’ฃ ๐Ÿ’ฃ ๐Ÿ’ฃ )