hye-log

[๋ถ€์ŠคํŠธ์บ ํ”„ AI Tech]WEEK 01_DAY 02 ๋ณธ๋ฌธ

Boostcourse/AI Tech 4๊ธฐ

[๋ถ€์ŠคํŠธ์บ ํ”„ AI Tech]WEEK 01_DAY 02

iihye_ 2022. 9. 21. 02:00

๐ŸŒŸ ๊ฐœ๋ณ„ํ•™์Šต


[2-2] Function & Console IO

1. Function

1) ์–ด๋–ค ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ์˜ ๋ฉ์–ด๋ฆฌ

2) ์บก์Šํ™” : ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์•Œ๋ฉด ํƒ€์ธ์˜ ์ฝ”๋“œ ์‚ฌ์šฉ

# define function
def function_name(parameter #1, ... ,):
    statements #1
    statements #2
    return return_value

function_name(argument)

 

2. Console I/O

1) input() : ์ฝ˜์†”์ฐฝ์—์„œ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ ๋ฐ›๋Š” ํ•จ์ˆ˜. string์œผ๋กœ ๋ฐ›์œผ๋ฏ€๋กœ ํ•„์š”ํ•˜๋ฉด ํ˜•๋ณ€ํ™˜ ํ•˜๊ธฐ

2) print() : ์ฝ˜์†”์ฐฝ์— ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜. ํƒ€์ž…์ด ๋‹ค๋ฅธ ๊ฐ’์€ ์ฝค๋งˆ(,)๋กœ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ

 

3. print formatting

# % string : "%datatype" % (variable)
print("%d %d %d" % (1, 2, 3))
>> 1, 2, 3

print("Art: %5d, Price per Unit: %8.2f" % (453, 59.058))
>> Art:   453, Price per Unit:      59.05
# format function 
print("{} {} {}".format("a", "b", "c"))
>> a b c

name = "Lee Hye Jin"
age = 2n
print("My name is {0} and {1} years old".format(name, age))
>> My name is Lee Hye Jin and 2n years old

print("My name is {0:<15s} and {1:>5s} years old".format(name,age))
>> My name is Lee Hye Jin     and    2n years old
# fstring
name = "Lee Hye Jin"
age = 2n
print(f"Hello, {name}. You are {age}")
>> Hello, Lee Hye Jin. You are 2n

print(f"{name:*<20}")					# ์™ผ์ชฝ ์ •๋ ฌ
>> Lee Hye Jin************

print((f"{name:*>20}")					# ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ
>> ************Lee Hye Jin

print((f"{name:*^20}")					# ๊ฐ€์šด๋ฐ ์ •๋ ฌ
>> ******Lee Hye Jin******

[2-3] Conditionals & Loops

1. condition(์กฐ๊ฑด๋ฌธ)

1) ์กฐ๊ฑด์— ๋”ฐ๋ผ ํŠน์ •ํ•œ ๋™์ž‘์„ ํ•˜๊ฒŒ ํ•˜๋Š” ๋ช…๋ น์–ด

2) ์กฐ๊ฑด์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ธฐ์ค€, ์‹คํ–‰ํ•ด์•ผ ํ•  ๋ช…๋ น

3) if, else, elif

# define if-else condition
if condition:
	statement1
else:
	statement2

4) ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž : and, or, not

5) ์‚ผํ•ญ ์—ฐ์‚ฐ์ž : ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐธ์ผ ๊ฒฝ์šฐ์™€ ๊ฑฐ์ง“์ผ ๊ฒฝ์šฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ํ•œ ์ค„์— ํ‘œํ˜„

value = 12
is_even = True if value % 2 == 0 else False
print(is_even)
>> True

 

2. loop(๋ฐ˜๋ณต๋ฌธ)

1) ์ •ํ•ด์ง„ ๋™์ž‘์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•˜๋Š” ๋ช…๋ น๋ฌธ

2) ๋ฐ˜๋ณต ์‹œ์ž‘ ์กฐ๊ฑด, ์ข…๋ฃŒ ์กฐ๊ฑด, ์ˆ˜ํ–‰ ๋ช…๋ น

3) for

for looper in range(0, 5):			# range(0, 5) == range(5) == [0, 1, 2, 3, 4]
	print("Hello")
>> Hello
>> Hello
>> Hello
>> Hello
>> Hello

4) range์˜ ์‘์šฉ

for i in range(1, 10, 2):
    print(i)
>> 1
>> 3
>> 5
>> 7
>> 9

for i in range(1, 5, -1):
    print(i)
>> 4
>> 3
>> 2
>> 1

5) while

i = 1
while i < 10:
    print(i)
    i += 1

6) break, continue

# break
for i in range(10):
    if i == 5:			# i๊ฐ€ 5๊ฐ€ ๋˜๋ฉด ๋ฐ˜๋ณต ์ข…๋ฃŒ
    	break
    print(i)
# continue
for i in range(10):
    if i == 5:			# i๊ฐ€ 5๊ฐ€ ๋˜๋ฉด i๋ฅผ ์ถœ๋ ฅํ•˜์ง€ ์•Š์Œ(skip)
    	continue
    print(i)

 

3. Debugging(๋””๋ฒ„๊น…)

1) ์ฝ”๋“œ์˜ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•˜์—ฌ ์ˆ˜์ •ํ•˜๋Š” ๊ณผ์ •

2) ๋ฌธ๋ฒ•์  ์—๋Ÿฌ - ๋“ค์—ฌ์“ฐ๊ธฐ, ์˜คํƒˆ์ž, ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„

3) ๋…ผ๋ฆฌ์  ์—๋Ÿฌ - ์ค‘๊ฐ„ ์ค‘๊ฐ„ ํ”„๋ฆฐํŠธ ๋ฌธ ์ฐ์–ด์„œ ํ™•์ธ


[2-4] String & advanced function 

1. string

1) ์‹œํ€€์Šค ์ž๋ฃŒํ˜•์œผ๋กœ ๋ฌธ์žํ˜• data๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ

2) ์ธ๋ฑ์‹ฑ(indexing) : ๊ฐœ๋ณ„ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•ด ํ• ๋‹น๋œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ

3) ์Šฌ๋ผ์ด์‹ฑ(slicing) : ๋ฌธ์ž์—ด ์ฃผ์†Œ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฌธ์ž์—ด์˜ ๋ถ€๋ถ„๊ฐ’์„ ๋ฐ˜ํ™˜

4) ๋‹ค์–‘ํ•œ ๋ฌธ์ž์—ด์˜ ํ‘œํ˜„

# ์ž‘์€๋”ฐ์˜ดํ‘œ์˜ ์‚ฌ์šฉ : It's OK
print('It\'s OK')
print("It's OK")
# ๋‘ ์ค„ ์ด์ƒ ์ž‘์„ฑ : \n ๋˜๋Š” ๋”ฐ์˜ดํ‘œ ์„ธ ๋ฒˆ ์—ฐ์† ์‚ฌ์šฉ
print("It's OK \n I'm Happy"
print("""It's OK
	I'm Happy""")

5) raw string : ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ์ธ์‹

raw_string = r'Hello \n Hyejin'
>> Hello \n Hyejin

 

2. call by object reference

1) ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹

- ๊ฐ’์— ์˜ํ•œ ํ˜ธ์ถœ(Call by Value) : ํ•จ์ˆ˜์— ์ธ์ž๋ฅผ ๋„˜๊ธธ ๋•Œ ๊ฐ’๋งŒ ๋„˜๊น€

- ์ฐธ์กฐ์— ์˜ํ•œ ํ˜ธ์ถœ(Call by Reference) : ํ•จ์ˆ˜์— ์ธ์ž๋ฅผ ๋„˜๊ธธ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋„˜๊น€(์ธ์ž ๊ฐ’ ๋ณ€๊ฒฝ ์‹œ ํ˜ธ์ถœ ๊ฐ’๋„ ๋ณ€๊ฒฝ)

- ๊ฐ์ฒด ์ฐธ์กฐ์— ์˜ํ•œ ํ˜ธ์ถœ(Call by Object Reference) : ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ€ ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ฐฉ์‹(ํŒŒ์ด์ฌ)

def spam(eggs):
    eggs.append(1)		# eggs = ham / eggs = [0, 1] / ham = [0, 1]
    eggs = [2, 3]		# eggs = [2, 3] / ham = [0, 1]
    
ham = [0]			# ham = [0]
spam(ham)			
print(ham)			# ham = [0, 1]

 

3. scoping rule(๋ณ€์ˆ˜์˜ ๋ฒ”์œ„)

- ์ง€์—ญ ๋ณ€์ˆ˜(local variable) : ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ

- ์ „์—ญ ๋ณ€์ˆ˜(global variable) : ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด์—์„œ ์‚ฌ์šฉ

def calculate(x, y):
    total = x + y
    print('In function')	# a = 5, b = 7, a+b = 12, total = 12
    return total

a = 5
b = 7
total = 0
print('In program - 1')		# a = 5, b = 7, a+b = 12

sum = calculate(a, b)
print('After calculation')	# total = 0, sum = 12

 

4. recursive function(์žฌ๊ท€ ํ•จ์ˆ˜)

1) ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜

2) ์žฌ๊ท€ ์ข…๋ฃŒ ์กฐ๊ฑด ์กด์žฌ, ์ข…๋ฃŒ ์กฐ๊ฑด๊นŒ์ง€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐ˜๋ณต

def factorial(n):
    if n == 1:
    	return 1
    else:
    	return n + factorial(n-1)

 

5. function docstring

1) ํŒŒ์ด์ฌ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ƒ์„ธ์ŠคํŽ™์„ ์‚ฌ์ „์— ์ž‘์„ฑ

2) ์„ธ ๊ฐœ์˜ ๋”ฐ์˜ดํ‘œ๋กœ ํ•จ์ˆ˜๋ช… ์•„๋ž˜์— ์ž‘์„ฑ

def add_binary(a, b):
    """
    Returns the sum of two decimal numbers in binary digits
    
    	Parameters:
            a(int): A decimal integer
            b(int) : Another decimal integer
            
        Returns:
        	binary_sum(str) : Binary string of the sum of a and b
    """
    binary_sum = bin(a+b)[2:]
    return binary_sum

 

6. ํ•จ์ˆ˜ ์ž‘์„ฑ ๊ฐ€์ด๋“œ

1) ๊ฐ€๋Šฅํ•œ ์งง๊ฒŒ

2) ํ•จ์ˆ˜ ์ด๋ฆ„์— ํ•จ์ˆ˜์˜ ์—ญํ• , ์˜๋„ ๋“œ๋Ÿฌ๋‚˜๊ฒŒ

3) ํ•˜๋‚˜์˜ ํ•จ์ˆ˜์— ํ•˜๋‚˜์˜ ์—ญํ• 

4) ์ธ์ž๋กœ ๋ฐ”๊พผ ๊ฐ’ ์ž์ฒด๋ฅผ ๋ฐ”๊พธ์ง€ ๋ง ๊ฒƒ

5) ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ, ๋ณต์žกํ•œ ์ˆ˜์‹, ๋ณต์žกํ•œ ์กฐ๊ฑด์€ ํ•จ์ˆ˜๋กœ

 

+ black ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ PEP8 like ์ˆ˜์ค€์„ ์ค€์ˆ˜

์„ค์น˜ : conda install black

ํ™•์ธ : flake8 codename.py

์‚ฌ์šฉ : black codename.py

 

* ์ข‹์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์‚ฌ๋žŒ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ง ๋‹ค.  -๋งˆํ‹ด ํŒŒ์šธ๋Ÿฌ


[1] ๋ฒกํ„ฐ๊ฐ€ ๋ญ์—์š”

1. ๋ฒกํ„ฐ

1) ์ˆซ์ž๋ฅผ ์›์†Œ๋กœ ๊ฐ€์ง€๋Š” ๋ฆฌ์ŠคํŠธ(list) ๋˜๋Š” ๋ฐฐ์—ด(array)

x = [1, 7, 2]
x = np.array([1, 7, 2])

2) n์ฐจ์› ๊ณต๊ฐ„์—์„œ์˜ ํ•œ ์ 

3) ์›์ ์œผ๋กœ๋ถ€ํ„ฐ ์ƒ๋Œ€์  ์œ„์น˜๋ฅผ ํ‘œํ˜„

4) ์ˆซ์ž๋ฅผ ๊ณฑํ•ด์ฃผ๋ฉด ๊ธธ์ด๊ฐ€ ๋ณ€ํ•จ

- 1๋ณด๋‹ค ํฌ๋ฉด ๊ธธ์ด๊ฐ€ ๋Š˜์–ด๋‚จ

- 1๋ณด๋‹ค ์ž‘์œผ๋ฉด ๊ธธ์ด๊ฐ€ ์ค„์–ด๋“ฆ

- 0๋ณด๋‹ค ์ž‘์œผ๋ฉด ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์ด ๋จ

5) ๋ฒกํ„ฐ๋ผ๋ฆฌ ๊ฐ™์€ ๋ชจ์–‘์„ ๊ฐ€์ง€๋ฉด ๋ง์…ˆ, ๋บ„์…ˆ, ์„ฑ๋ถ„๊ณฑ์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Œ

 

2. ๋ฒกํ„ฐ์˜ ๋ง์…ˆ

1) ๋‘ ๋ฒกํ„ฐ์˜ ๋ง์…ˆ์€ ๋‹ค๋ฅธ ๋ฒกํ„ฐ๋กœ๋ถ€ํ„ฐ ์ƒ๋Œ€์  ์œ„์น˜์ด๋™์„ ํ‘œํ˜„  ์˜ˆ) y + x

2) ๋‘ ๋ฒกํ„ฐ์˜ ๋บ„์…ˆ์€ ๋‹ค๋ฅธ ๋ฒกํ„ฐ๋กœ๋ถ€ํ„ฐ ์ƒ๋Œ€์  ์œ„์น˜์ด๋™์„ ํ‘œํ˜„  ์˜ˆ) y - x

 

3. ๋ฒกํ„ฐ์˜ ๋…ธ๋ฆ„

1) ์›์ ์—์„œ๋ถ€ํ„ฐ์˜ ๊ฑฐ๋ฆฌ

2) L1 ๋…ธ๋ฆ„ : ๊ฐ ์„ฑ๋ถ„์˜ ๋ณ€ํ™”๋Ÿ‰์˜ ์ ˆ๋Œ€๊ฐ’์„ ๋ชจ๋‘ ๋”ํ•จ

3) L2 ๋…ธ๋ฆ„ : ํ”ผํƒ€๊ณ ๋ผ์Šค ์ •๋ฆฌ๋ฅผ ์ด์šฉํ•œ ์œ ํด๋ฆฌ๋“œ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐ

def L1_norm(x):
	x_norm = np.sum(np.abs(x))
	return x_norm

def L2_norm(x):
	x_norm = np.sqrt(np.sum(x*x))
	return x_norm

4) ๋…ธ๋ฆ„์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ฅธ ๊ธฐํ•˜ํ•™์  ์„ฑ์งˆ

- L1 ๋…ธ๋ฆ„ ์ƒ์˜ ์› : ๋งˆ๋ฆ„๋ชจ ๋ชจ์–‘  ์˜ˆ) Robust ํ•™์Šต, Lasso ํšŒ๊ท€

- L2 ๋…ธ๋ฆ„ ์ƒ์˜ ์› : ์› ๋ชจ์–‘  ์˜ˆ) Laplace ๊ทผ์‚ฌ, Ridge ํšŒ๊ท€

 

4. ๋‘ ๋ฒกํ„ฐ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ์™€ ๊ฐ๋„

1) ๋‘ ๋ฒกํ„ฐ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ : ๋ฒกํ„ฐ์˜ ๋บ„์…ˆ์„ ์ด์šฉ (์ˆœ์„œ๋Š” ์ƒ๊ด€ ์—†์Œ)

2) ๋‘ ๋ฒกํ„ฐ ์‚ฌ์ด์˜ ๊ฐ๋„ : ์ œ2 ์ฝ”์‚ฌ์ธ ๋ฒ•์น™ -> ๋‚ด์  ์ด์šฉ (L2 ๋…ธ๋ฆ„๋งŒ ๊ฐ€๋Šฅ)

def angle(x, y):
    v = np.inner(x, y) / (L2_norm(x) * L2_norm(y))
    theta = np.arccos(v)
    return theta

 

5. ๋‚ด์ 

1) Proj(x) = ||x||cosθ

2) ์ •์‚ฌ์˜์˜ ๊ธธ์ด๋ฅผ ๋ฒกํ„ฐ y์˜ ๊ธธ์ด ||y||๋งŒํผ ์กฐ์ •ํ•œ ๊ฐ’


๐ŸŒŸ ์˜ค๋Š˜์˜ ํšŒ๊ณ 

์˜ค์ „์— ๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ์„ ์‹œ์ž‘์œผ๋กœ ๋‘ ์‹œ๊ฐ„ ์ •๋„ ์คŒ ์ผœ๊ณ  ๊ณต๋ถ€ํ–ˆ๋‹ค. ์นด๋ฉ”๋ผ ์ผ  ์ƒํƒœ๋กœ ๋น„๋Œ€๋ฉด ์Šคํ„ฐ๋””๋Š” ์ฒ˜์Œ์ด๋ผ ๋ญ”๊ฐ€ ๊ต‰์žฅํžˆ ์–ด์ƒ‰.. ์ ์‹ฌ์€ ๊ทผ์ฒ˜์— ํฌ์žฅํ•˜๋Ÿฌ ๊ฑธ์–ด๊ฐ”๋‹ค์™”๋‹ค. ์ ์‹ฌ์‹œ๊ฐ„ 1์‹œ๊ฐ„์€ ๋ถ€์กฑ..ํ•ด..ใ… -ใ…  ์˜คํ›„์—๋„ ๊ทธ๋ผ์šด๋“œ ๋ฃฐ๋กœ ์คŒ์—์„œ ๊ณต๋ถ€ํ•˜๊ธฐ๋กœ ํ•ด์„œ ์—ด์‹ฌํžˆ ๊ฐ•์˜ ๋“ค์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ฐ•์˜๋Š” ๋“ค์–ด๋„ ๋“ค์–ด๋„ ์ค„์–ด๋“ค์ง€๊ฐ€ ์•Š๋Š”๋‹ค.. ์ด๋ฒˆ์ฃผ์— ๋‹ค ๋“ค์„ ์ˆ˜ ์žˆ๊ฒ ์ง€? ๊ธฐ๋ณธ ๊ณผ์ œ ๋ฌธ์ œ 3๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ๋งˆ์ง€๋ง‰ ๋ฌธ์ œ์—์„œ ๊ณ„์† ์˜ค๋ฅ˜๋‚˜์„œ ๊ณ ์น˜๋Š” ๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค. ์˜ค๋Š˜ ํ”ผ์–ด์„ธ์…˜ ๋•Œ์—๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์Šค๋ชฐํ† ํฌ๋กœ ์‹œ์ž‘ํ•ด์„œ ์ด๊ฒƒ์ €๊ฒƒ ์ด์•ผ๊ธฐ ๋‚˜๋ˆ„๋Š” ์‹œ๊ฐ„์œผ๋กœ ๋งˆ๋ฌด๋ฆฌํ–ˆ๋‹ค! ๋‚ด์ผ ์˜ค์ „์—๋Š” ํ”ผ์–ด์„ธ์…˜์ดํ”ผ์—ˆ์Šต๋‹ˆ๋‹ค ํ–‰์‚ฌ๊ฐ€ ์žˆ๋Š”๋ฐ ๋‹ค๋ฅธ ์บ ํผ๋ถ„๋“ค์€ ์–ด๋–ป๊ฒŒ ์ƒํ™œํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ฒŒ์จ ๊ถ๊ธˆํ•˜๋‹ค! ๋‚ด์ผ๋„ ๊ฐ•์˜ ์ง‘์ค‘ํ•ด์„œ ๋“ฃ๊ณ , ์‹ฌํ™” ๊ณผ์ œ๊นŒ์ง€ ๋„์ „ํ•ด๋ณด๊ธฐ๐Ÿ™†‍โ™€๏ธ

 

728x90
Comments