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

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

by gomdeng 2024. 12. 18.

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

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

 

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

โœจ ํ•™์Šต๋ฐ˜ ๊ณผ์ œ - ํŒŒ์ด์ฌ ๋ฌธ์ œ 40 (๋”•์…”๋„ˆ๋ฆฌ/์ง‘ํ•ฉ)

โœ”๏ธ # ์ˆ™์ œ - 44
# {'apple': 111, 'banana': 222, 'cherry': 'babo'} ์—์„œ ๊ฐ’์ด babo๊ฐ€ ์žˆ๋‹ค๋ฉด babo ์ถœ๋ ฅ
data = {'apple': 111, 'banana': 222, 'cherry': 'babo'}

# 1. ์ „๋ถ€ ์ฒดํฌ
for v in data.values():
    if v == 'babo':
        print('babo')

# 2. valut in dict.values() ์‚ฌ์šฉ
if 'babo' in data.values():
    print('babo')

โœ”๏ธ ์ˆ™์ œ - 45
# {'apple': 111, 'banana': 222, 'cherry': 'babo'} ์—์„œ apple ์‚ญ์ œ ํ›„ ์ถœ๋ ฅ
data = {'apple': 111, 'banana': 222, 'cherry': 'babo'}

# 1. pop ์‚ฌ์šฉ 
# (๊ฐ’ ๋ฐ˜ํ™˜ O) ์‚ญ์ œ๋œ ๊ฐ’์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ 
data.pop('apple')

# 2. del ์‚ฌ์šฉ 
# (๊ฐ’ ๋ฐ˜ํ™˜ X) ๋‹จ์ˆœํžˆ ์‚ญ์ œ๋งŒ ํ•  ๊ฒฝ์šฐ 
del data['apple']
print(data)

โœ”๏ธ ์ˆ™์ œ - 46
# {'apple': 111, 'banana': 222, 'cherry': 'babo'} ์—์„œ banana์˜ ๊ฐ’์„ babooo๋กœ ์ˆ˜์ •
data = {'apple': 111, 'banana': 222, 'cherry': 'babo'}
data['banana'] = 'babooo'
print(data)

# update() :: ์—ฌ๋Ÿฌ๊ฐ’ ๋™์‹œ์— ๋ณ€๊ฒฝ
# data.update({'apple': 333, 'banana': 444})

โœ”๏ธ ์ˆ™์ œ - 47
# {'a': 1, 'b': 2}์™€ {'c': 3, 'd': 4}๋ฅผ ํ•ฉ์น˜์‹œ์˜ค,
dict_1 = {'a': 1, 'b': 2, 'c':3}
dict_2 = {'c': 4, 'd': 5}

# 1. update() ์‚ฌ์šฉ (์ค‘๋ณต๋œ ํ‚ค๋Š” ์˜ค๋ฅธ์ชฝ dict ๊ฐ’์œผ๋กœ ๋ฎ์–ด์“ฐ๊ธฐ)
dict_1.update(dict_2)
print(dict_1)

# 2. ** ์–ธํŒจํ‚น ์‚ฌ์šฉ (์ค‘๋ณต๋œ ํ‚ค๋Š” ์˜ค๋ฅธ์ชฝ dict ๊ฐ’์œผ๋กœ ๋ฎ์–ด์“ฐ๊ธฐ)
answer = {**dict_1, **dict_2}
print(answer)

# 3. ๋”•์…”๋„ˆ๋ฆฌ ์ปดํ”„๋ฆฌํ—จ์…˜ ์‚ฌ์šฉ => dict.items() ์œผ๋กœ ์ƒˆ๋กœ์šด ์ปดํ”„๋ฆฌํ—จ์…˜ ์‚ฌ์šฉ
answer = {key: value for d in [dict_1, dict_2] for key, value in d.items()}
print(answer)

# 4. ์ค‘๋ณต ํ‚ค ์ฒ˜๋ฆฌ (ํ‚ค๊ฐ€ ์ค‘๋ณต๋˜๋ฉด ๋ชจ๋“  ๊ฐ’์„ ์œ ์ง€ํ•˜๊ธฐ)
# from collections import defaultdict
# result = defaultdict(list)
# 
# for d in [dict_1, dict_2]:
#     for key, value in d.items():
#         result[key].append(value)
# 
# print(dict(result))        

โœ”๏ธ ์ˆ™์ œ - 52
# {'apple': 111, 'banana': '222', 'cherry': 333} ์— ๊ฐ’์„ ํ•ฉ์‚ฐํ•˜๋ผ
# hint ํ˜•๋ณ€ํ™˜
data = {'apple': 111, 'banana': '222', 'cherry': 333}

answer = 0
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.metrics import mean_absolute_error         # ํšŒ๊ท€ ๋ชจ๋ธ์˜ ํ‰๊ท  ์ ˆ๋Œ“๊ฐ’ ์˜ค์ฐจ ๊ณ„์‚ฐ
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-์ตœ๊ทผ์ ‘ ์ด์›ƒ ํšŒ๊ท€ ๋ชจ๋ธ ์„ ์–ธ
knr = KNeighborsRegressor()

# ํ•™์Šต/ํ‰๊ฐ€
knr.fit(train_input, train_target)
knr.score(test_input, test_target) # 0.992809406101064

# ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์˜ˆ์ธก ์ƒ์„ฑ
test_predict = knr.predict(test_input)

# ํ…Œ์ŠคํŠธ ์„ธํŠธ์— ๋Œ€ํ•œ ํ‰๊ท  ์ ˆ๋Œ“๊ฐ’ ์˜ค์ฐจ ๊ณ„์‚ฐ
mae = mean_absolute_error(test_target, test_predict) # 19.157142857142862

# ํ…Œ์ŠคํŠธ ์ด์›ƒ ์ˆ˜ ๋ฆฌ์ŠคํŠธ
neighbor_list = [1, 5, 10]

# ๊ณผ๋Œ€์ ํ•ฉ/๊ณผ์†Œ์ ํ•ฉ ํ™•์ธ
for n in neighbor_list:
    knr.n_neighbors = n
    knr.fit(train_input, train_target)
    print(knr.score(train_input, train_target))
    print(knr.score(test_input, test_target))
    print('--------------------')

--------------------
0.9852830341215901
0.991309195814175
--------------------
0.9698823289099254
0.992809406101064
--------------------
0.96164569026043
0.9737908255822255
--------------------

 

 

๐Ÿถ ๋А๋‚€์ 

1. ๊ฐœ์ธ๊ณผ์ œ๊ฐ€ ๋‚˜์™”๋‹ค. (๐Ÿ’ฃ ๐Ÿ’ฃ )
2. ์ˆ˜ํ•™ ๊ฐ•์ขŒ๋ฅผ ๋“ค์—ˆ๋‹ค. (๋ชจ๋ฅด๊ฒ ๋‹ค ๐Ÿ’ฃ ๐Ÿ’ฃ ๐Ÿ’ฃ  )
3. ์—‰๋ฉ์ด ์•„ํ”„๋‹ค ( ๐Ÿ’ฃ ๐Ÿ’ฃ ๐Ÿ’ฃ ๐Ÿ’ฃ ๐Ÿ’ฃ )