Exercise.1 - 9: 추가점수를 받은 학생들의 평균 복합 대입 연산자를 이용해 학생들의 점수를 수정하고, 평균을 다시 구해봅니다.¶
이를 통해 모든 data가 같은 값으로 변했을 때 평균이 어떻게 바뀌는지 확인해봅니다.
score1 = 10
score2 = 20
score3 = 30
n_student = 3
mean = (score1 + score2 + score3)/n_student
print(mean)
20.0
score1 += 10
score2 += 10
score3 += 10
print(score1, score2, score3)
20 30 40
mean = (score1 + score2 + score3)/n_student
print(mean)
30.0
Exercise.1 - 10: Mean Subtraction¶
수학식(mean subtraction)을 코드로 만드는 연습을 해봅니다.
평균 차감(Mean Subtraction) 가장 흔하게 사용되는 데이터 전처리 기법이다. 데이터의 모든 피쳐(feature)에 각각에 대해서 평균값 만큼 차감하는 방법으로 기하학 관점에서 보자면 데이터 군집을 모든 차원에 대해서 원점으로 이동시키는 것으로 해석할 수 있다. numpy에서는 다음과 같이 구현 가능하다: X -= np.mean(X, axis = 0). 특히 이미지 처리에 있어서 계산의 간결성을 위해서 모든 픽셀에서 동일한 값을 차감하는 방식으로 구현한다.(예를들어 numpy에서 X -= np.mean(X))
score1 = 10
score2 = 20
score3 = 30
n_student = 3
score_mean = (score1 + score2 + score3) / n_student
print(score_mean)
20.0
score1 -= score_mean
score2 -= score_mean
score3 -= score_mean
score_mean = (score1 + score2 + score3) / n_student
print(score_mean)
0.0
score1 = 10
score2 = 20
score3 = 30
n_students = 3
mean = (score1 + score2 + score3) / n_students
square_of_mean = mean**2
mean_of_square = (score1**2 + score2**2 + score3**2) / n_students
print('square_of_mean: ', square_of_mean)
print('mean_of_squre: ', mean_of_square)
square_of_mean: 400.0
mean_of_squre: 466.6666666666667
Exercise.1 - 12: 분산과 표준편차¶
수학식(분산과 표준편차)을 코드로 만드는 연습을 해봅니다.
score1 = 10
score2 = 20
score3 = 30
n_student = 3
score_mean = (score1 + score2 + score3) / n_student
square_of_mean = score_mean**2 # 평균의 제곱
mean_of_square = (score1**2 + score2**2 + score3**2)/n_student # 제곱의 평균
score_variance = mean_of_square - square_of_mean # 분산 = 평균의 제곱 - 제곱의 평균
score_std = score_variance**0.5 # 표준편차
print('mean: ', score_mean)
print('variance: ', score_variance)
print('standard deviation: ', score_std)
mean: 20.0
variance: 66.66666666666669
standard deviation: 8.16496580927726
Exercise.1 - 13: Standardization¶
분산과 표준편차를 이용하여, 수학식(standardization)을 코드로 만드는 연습을 해봅니다.
score1 = 10
score2 = 20
score3 = 30
n_student = 3
score_mean = (score1 + score2 + score3) / n_student
square_of_mean = score_mean**2 # 평균의 제곱
mean_of_square = (score1**2 + score2**2 + score3**2)/n_student # 제곱의 평균
score_variance = mean_of_square - square_of_mean # 분산 = 평균의 제곱 - 제곱의 평균
score_std = score_variance**0.5 # 표준편차
print('mean: ', score_mean)
print('variance: ', score_variance)
print('standard deviation: ', score_std)
score1 = (score1 - score_mean) / score_std
score2 = (score2 - score_mean) / score_std
score3 = (score3 - score_mean) / score_std
score_mean = (score1 + score2 + score3) / n_student
square_of_mean = score_mean**2
mean_of_square = (score1**2 + score2**2 + score3**2) / n_student
score_variance = mean_of_square - square_of_mean
score_std = score_variance ** 0.5
print('mean: ', score_mean)
print('stardard deviation: ', score_std)
mean: 20.0
variance: 66.66666666666669
standard deviation: 8.16496580927726
mean: 0.0
stardard deviation: 1.0
Exercise.1 - 14: Vector-Vector Operations¶
수학식(Vector Operations)을 코드로 만드는 연습을 해봅니다.
# hadamard projuct
x1, y1, z1 = 1, 2, 3
x2, y2, z2 = 3, 4, 5
x3, y3, z3 = x1 + x2, y1 + y2, z1 + z2
x4, y4, z4 = x1 - x2, y1 - y2, z1 - z2
x5, y5, z5 = x1 * x2, y1 * y2, z1 * z2
print(x3, y3, z3)
print(x4, y4, z4)
print(x5, y5, z5)
4 6 8
-2 -2 -2
3 8 15
import numpy as np
a = np.array([1, 2, 3])
b = np.array([3, 4, 5])
print(a + b)
print(a - b)
print(a * b)
[4 6 8]
[-2 -2 -2]
[ 3 8 15]
Exercise.1 - 15: Scalar-Vector Operations¶
수학식(scalar-vector operation)을 코드로 만드는 연습을 해봅니다.
a = 10
x1, y1, z1 = 1, 2, 3
x2, y2, z2 = a*x1, a*y1, a*z1
x3, y3, z3 = a + x1, a + y1, a + z1
x4, y4, z4 = a - x1, a - y1, a - z1
print(x1, y1, z1)
print(x2, y2, z2)
print(x3, y3, z3)
1 2 3
10 20 30
11 12 13
A = np.array([1, 2, 3])
print(a*A)
print(a+A)
print(a-A)
[10 20 30]
[11 12 13]
[9 8 7]
Exercise.1 - 16: Vector Norm(백터의 크기)¶
수학식(vector norm)을 코드로 만드는 연습을 해봅니다.
원점에서 시작하는 백터의 길이
x, y, z = 1, 2, 3
norm = (x ** 2 + y ** 2 + z ** 2)**0.5
print(norm)
3.7416573867739413
from numpy import linalg as LA
print(LA.norm([1, 2, 3]))
3.7416573867739413
Exercise.1 - 17: Making Unit Vectors¶
수학식(unit vector를 만드는 방법)을 코드로 만드는 연습해봅니다.
수기로 쓰면서 익혀야 한다.
x, y, z = 1, 2, 3
norm = (x ** 2 + y ** 2 + z ** 2)**0.5
print(norm)
x, y, z = x/norm, y/norm, z/norm
norm = (x**2 + y**2 + z**2)**0.5
print(norm)
3.7416573867739413
1.0
Exercise.1 - 18: Dot Product(내적)¶
수학식(dot product)을 코드로 만드는 연습을 해봅니다.
hadamard projuct 와 다른 개념이다.
백터와의 내적은 consine similarity 를 구할때 사용된다.
https://wikidocs.net/24603
x1, y1, z1 = 1, 2, 3
x2, y2, z2 = 3, 4, 5
dot_prod = x1 * x2 + y1 * y2 + z1 * z2
print(dot_prod)
26
from math import cos
import numpy as np
from numpy import dot
from numpy.linalg import norm
def cos_sim(A, B):
return dot(A, B)/(norm(A)*norm(B))
print(cos_sim(np.array([1, 2, 3]), np.array([3, 6, 9])))
print(cos(dot_prod))
1.0
0.6469193223286404
Exercise.1 - 19: Euclidean distance(기하학적 거리)¶
수학식(Euclidean distance)을 코드로 만드는 연습을 해봅니다.
numpy 구현 예시
https://www.geeksforgeeks.org/calculate-the-euclidean-distance-using-numpy/
x1, y1, z1 = 1, 2, 3
x2, y2, z2 = 3, 4, 5
e_distance = (x1 - x2)**2 + (y1 - y2)**2 + (z1 - z2)**2
e_distance **= 0.5
print(e_distance)
3.4641016151377544
# Python code to find Euclidean distance
# using linalg.norm()
import numpy as np
# initializing points in
# numpy arrays
point1 = np.array((1, 2, 3))
point2 = np.array((3, 4, 5))
# calculating Euclidean distance
# using linalg.norm()
dist = np.linalg.norm(point1 - point2)
# printing Euclidean distance
print(dist)
3.4641016151377544
# Python code to find Euclidean distance
# using dot()
import numpy as np
# initializing points in
# numpy arrays
point1 = np.array((1, 2, 3))
point2 = np.array((3, 4, 5))
# subtracting vector
temp = point1 - point2
# doing dot product
# for finding
# sum of the squares
sum_sq = np.dot(temp.T, temp)
# Doing squareroot and
# printing Euclidean distance
print(np.sqrt(sum_sq))
3.4641016151377544
# Python code to find Euclidean distance
# using sum() and square()
import numpy as np
# initializing points in
# numpy arrays
point1 = np.array((1, 2, 3))
point2 = np.array((3, 4, 5))
# finding sum of squares
sum_sq = np.sum(np.square(point1 - point2))
# Doing squareroot and
# printing Euclidean distance
print(np.sqrt(sum_sq))
3.4641016151377544
Exercise.1 - 21: Mean Squared Error(평균 제곱 오차)¶
수학식(MSE)을 코드로 만드는 연습을 해봅니다.
pred1, pred2, pred3 = 10, 20, 30
y1, y2, y3 = 10, 25, 40
n_data = 3
s_error1 = (pred1 - y1)**2
s_error2 = (pred2 - y2)**2
s_error3 = (pred3 - y3)**2
mse = (s_error1 + s_error2 + s_error3)/n_data
print(mse)
41.666666666666664
Exercise.1 - 22: List 만들기 & 원소 접근하기 data들을 각각변수에 할당하면 불편한 점을 확인하고, 이를 해결해주는 List에 대해 배웁니다.¶
Python에서 LiSt를 만드는 방법과, 각 원소를 접근하여 출력하는 방법을 배웁니다.
scores = [10, 20, 30]
print(scores[0])
print(scores[1])
print(scores[2])
10
20
30
Exercise.1 - 23: List의 원소 수정하기 이미 만들어진 List의 원소에 접근하여 수정하는 방법을 배웁니다.¶
list[]는 출력과 수정에 모두 사용되는 것을 확인합니다.
scores = [10, 20, 30]
print(scores)
scores[0] = 100
scores[1] = 200
print(scores)
[10, 20, 30]
[100, 200, 30]
Exercise.1 - 24: 수학점수들의 평균 구하기(2)¶
list와 가장 많이 사용되는 함수 중 하나인 len( )의 사용법을 배웁니다. 원소에 접근하는 방법을 통해 평균을 구하는 방법을 복습합니다.
scores = [10, 20, 30]
n_student = len(scores)
mean = (scores[0] + scores[1] + scores[2]) / n_student
print("score mean: ", mean)
score mean: 20.0
Exercise.1 - 25: Mean Subtraction(2)¶
평균을 구하는 방법을 이용하여 평균을 구하고, 원소를 수정하는 방법을 이용하여 각 원소에 평균을 빼줍니다. Mean subtraction을 해주면 data들의 평균은 0이 됨을 확인합니다.
scores: list[float] = [10, 20, 30]
n_student = len(scores)
mean = (scores[0] + scores[1] + scores[2]) / n_student
print('score mean: ', mean)
scores[0] -= mean
scores[1] -= mean
scores[2] -= mean
mean = (scores[0] + scores[1] + scores[2]) / n_student
print('score mean: ', mean)
score mean: 20.0
score mean: 0.0
Exercise.1 - 26: 분산과 표준편차(2)¶
점수가 저장된 List를 이용하여 분산과 표준편차를 구하는 과정을 복습합니다.
scores = [10, 20, 30]
n_student = len(scores)
mean = (scores[0] + scores[1] + scores[2]) / n_student
square_of_mean = mean**2 # 평균의 제곱
mean_of_square = (scores[0]**2 + scores[1]**2 + scores[2]**2) / n_student # 제곱의 평균
variance = mean_of_square - square_of_mean # 분산 = 제평 - 평제(MOS - SOM)
std = variance**0.5 # square root of the variance 표준편차
print('score mean: ', mean)
print('score standard deviation: ', std)
score mean: 20.0
score standard deviation: 8.16496580927726
Exercise.1 - 27: Standardization(2)¶
평균과 분산을 이용해 standardization을 하는 방법을 복습합니다. standardization 후에 평균은 0, 표준편차는 1로 바뀌는 것을 확인합니다.
scores = [10, 20, 30]
n_student = len(scores)
mean = (scores[0] + scores[1] + scores[2]) / n_student
square_of_mean = mean**2 # 평균의 제곱
mean_of_square = (scores[0]**2 + scores[1]**2 + scores[2]**2) / n_student # 제곱의 평균
variance = mean_of_square - square_of_mean # 분산 = 제평 - 평제(MOS - SOM)
std = variance**0.5 # square root of the variance 표준편차
print('score mean: ', mean)
print('score standard deviation: ', std)
# Standardization 표준정규분포 표준화
scores[0] = (scores[0] - mean)/std
scores[1] = (scores[1] - mean)/std
scores[2] = (scores[2] - mean)/std
mean = (scores[0] + scores[1] + scores[2]) / n_student
square_of_mean = mean**2 # 평균의 제곱
mean_of_square = (scores[0]**2 + scores[1]**2 + scores[2]**2) / n_student # 제곱의 평균
variance = mean_of_square - square_of_mean # 분산 = 제평 - 평제(MOS - SOM)
std = variance**0.5 # square root of the variance 표준편차
print('score mean: ', mean)
print('score standard deviation: ', std)
score mean: 20.0
score standard deviation: 8.16496580927726
score mean: 0.0
score standard deviation: 1.0
Exercise.1 - 28: Hadamard Product(2)¶
Vector를 List로 만드는 방법을 배우고, 이 List들을 이용해 Hadamard product을 하는 방법에 대해 복습합니다.
v1, v2 = [1, 2, 3], [3, 4, 5]
v3 = [v1[0]*v2[0], v1[1]*v2[1], v1[2]*v2[2]]
print(v3)
v1, v2 = [1, 2, 3], [3, 4, 5]
v3 = [0, 0, 0]
v3[0] = v1[0]*v2[0]
v3[1] = v1[1]*v2[1]
v3[2] = v1[2]*v2[2]
print(v3)
[3, 8, 15]
[3, 8, 15]
Exercise.1 - 29: list( )° append()¶
LiSt에 원소를 추가하는 list append( )에 대해 배웁니다.
v1 = list()
print(v1)
v1.append(1)
print(v1)
v1.append(2)
print(v1)
v1.append(3)
print(v1)
[]
[1]
[1, 2]
[1, 2, 3]
Exercise.1 - 30: Hadamard Product(3)¶
Hadamard product 계산하는 방법에 대해 list( )와 append()를 적용해봅니다.
v1, v2 = [1, 2, 3], [3, 4, 5]
v3 = list()
v3.append(v1[0] * v2[0])
v3.append(v1[1] * v2[1])
v3.append(v1[2] * v2[2])
print(v3)
[3, 8, 15]
Exercise.1 - 31: Vector Norm(2)¶
List의 원소의 접근하는 방법을 이용하여 vector norm을 구하는 방법을 복습합니다.
v1 = [1, 2, 3]
norm = (v1[0]**2 + v1[1]**2 + v1[2]**2)**0.5
print(norm)
norm = 0
norm += v1[0]**2
norm += v1[1]**2
norm += v1[2]**2
norm **= 0.5
print(norm)
3.7416573867739413
3.7416573867739413
Exercise.1 - 32: Making Unit Vectors (2)¶
List의 원소의 접근하는 방법과 List를 만드는 방법을 이용하여 unit vector를 만드는 방법을 복습합니다. 연산 후에 vector normol 1이 됨을 확인합니다.
v1 = [1, 2, 3]
norm = (v1[0]**2 + v1[1]**2 + v1[2]**2)**0.5
print(norm)
v1 = [v1[0]/norm, v1[1]/norm, v1[2]/norm] # unit vectors
norm = (v1[0]**2 + v1[1]**2 + v1[2]**2)**0.5
print(norm)
3.7416573867739413
1.0
Exercise.1 - 33: Dot Product(2)¶
List의 원소의 접근하는 방법을 이용하여 dot product를 연산하는 방법에 대해 복습합니다.
v1, v2 = [1, 2, 3], [3, 4, 5]
# method.1
dot_prod = v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]
print(dot_prod)
# method.2
dot_prod = 0
dot_prod += v1[0]*v2[0]
dot_prod += v1[1]*v2[1]
dot_prod += v1[2]*v2[2]
print(dot_prod)
26
26
Exercise.1 - 34: Euclidean Distance (2)¶
LiSt의 원소의 접근하는 방법을 이용하여 Euclidean distance를 연산하는 방법에 대해 복습합니다.
v1, v2 = [1, 2, 3], [3, 4, 5]
e_distance = 0
e_distance += (v1[0] - v2[0]) ** 2
e_distance += (v1[1] - v2[1]) ** 2
e_distance += (v1[2] - v2[2]) ** 2
e_distance **= 0.5
print(e_distance)
3.4641016151377544
Exercise.1 - 35: Mean Squared Error(2)¶
List의 원소의 접근하는 방법을 이용하여 MSE를 연산하는 방법에 대해 복습합니다.
hat 씌어진 y : 예측값
predictions = [10, 20, 30] # 예측값
labels = [10, 25, 40] # 정답
n_data = len(predictions)
mse = 0
mse += (predictions[0] - labels[0])**2
mse += (predictions[1] - labels[1])**2
mse += (predictions[2] - labels[2])**2
mse /= n_data
print(mse)
41.666666666666664
Exercise.1 - 36: for loop으로 list의 원소 접근하기¶
For loop을 통해 list의 원소들에 차례차례 접근하는 방법에 대해 배웁니다.
Indentation level에 대해 배웁니다.
scores = [10, 20, 30]
for score in scores:
print(score)
10
20
30
Exercise.1 - 37: List 원소들의 합 구하기¶
앞에서 다룬 List를 직접 접근할 때의 불편함을 해결하는 방법을 배웁니다.
For loop을 통해 Iist의 원소들하고, 접근된 값을 이용하여 연산을 하는 방법에 대해 배웁니다.
scores = [10, 20, 30]
score_sum = 0 # 초기화 작업. 곱연산일 경우 0대신 1로 해야겠지?
for score in scores:
score_sum += score
print(score_sum)
60
Exercise.1 - 38: Iteration 횟수 구하기¶
For loop가 몇 번 iterate됬는지 구하는 방법을 배웁니다.
numbers = [1, 4, 5, 6, 4, 2, 1]
iter_cnt = 0
for _ in numbers: # _ 언더스코어
print(_,type(_))
iter_cnt += 1
print(iter_cnt)
1 <class 'int'>
4 <class 'int'>
5 <class 'int'>
6 <class 'int'>
4 <class 'int'>
2 <class 'int'>
1 <class 'int'>
7
Exercise.1 - 39: 1부터 100까지의 합 구하기¶
1부터 100까지 더하는 상황에 대해 불편한 점을 생각해보고, 이를 해결하기 위해 range( )의 사용법에 대해 배웁니다.
num_sum = 0
for i in range(101):
num_sum += i
print(num_sum)
5050
Exercise.1 - 40: 1부터 100까지 List 만들기¶
range( )와 list.append( )를 이용하여 1부터 100까지의 원소를 가지는 Iist를 쉽게 만드는 방법에 대해 배웁니다.
numbers = list()
for i in range(1, 101):
numbers.append(i)
print(numbers)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
Exercise.1 - 41: 100개의 0을 가진 List 만들기¶
range( )와 list.append()를 사용하여 list를 초기화 하는 방법에 대해 배웁니다.
numbers = list()
for _ in range(100):
numbers.append(0)
print(numbers)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Exercise.1 - 42: for loop으로 list의 원소 접근하기 (2)¶
For loop, len(), range( )를 이용하여 data index를 만드는 방법과, 이를 통해 List의 원소에 접근하는 다른 방법에 대해 배웁니다.
scores = [10, 20, 30]
# method.1
for score in scores:
print(score)
# method.2
for score_idx in range(len(scores)):
print(scores[score_idx])
10
20
30
10
20
30
Exercise.1- 43: for loop으로 list의 원소 수정하기¶
List의 원소를 수정할 때는 data index를 통해 for loop을 돌려야 됨을 이해합니다.
scores = [10, 20, 30, 40, 50]
for score_idx in range(len(scores)):
scores[score_idx] += 10
print(scores)
[20, 30, 40, 50, 60]
Exercise.1- 44: 두 개의 List 접근하기¶
2개의 LiSt들이 가진 원소들에 접근해야 될 때도, data index를 통해 for loop을 돌려야 됨을 이해합니다.
list1 = [10, 20, 30]
list2 = [100, 200, 300]
for idx in range(len(list1)):
print(list1[idx], list2[idx])
10 100
20 200
30 300
Exercise.1 - 45: 수학점수들의 평균 구하기 (3)¶
For loop을 통해 List의 원소들의 합을 구하는 2가지 방법을 복습합니다.
scores = [10, 20, 30]
# method.1
score_sum = 0
n_student = 0
for score in scores:
score_sum += score
n_student += 1
score_mean = score_sum / n_student
print('score mean: ', score_mean)
# method.2
score_sum = 0
for score_idx in range(len(scores)):
score_sum += scores[score_idx]
score_mean = score_sum / len(scores)
print('score mean: ', score_mean)
score mean: 20.0
score mean: 20.0
Exercise. 1 - 46: Mean Subtraction(3)¶
For loop을 이용하여 각 원소를 평균으로 빼주는 방법에 대해 배웁니다.
scores = [10, 20, 30]
score_mean = sum(scores)/len(scores)
# method.1
scores_ms = list()
for score in scores:
scores_ms.append(score - score_mean)
print(scores_ms)
# method.2
for score_idx in range(len(scores)):
scores_ms[score_idx] -= score_mean
print(scores_ms)
[-10.0, 0.0, 10.0]
[-30.0, -20.0, -10.0]
Exercise.1 - 47: 두 과목의 평균 구하기¶
Data index를 통해 두 개의 list에 들어있는 값들의 평균을 구해봅니다.
특정 값(평균)들을 가지고 있는 List()를 사용하는 방법에 대해 익힙니다.
math_scores = [40, 60, 80]
english_scores = [30, 40, 50]
n_class = 2
n_student = len(math_scores)
score_sums = list()
score_means = list()
for _ in range(n_class):
score_sums.append(0)
for student_idx in range(n_student):
score_sums[0] += math_scores[student_idx]
score_sums[1] += english_scores[student_idx]
print('sums of scores: ', score_sums)
for class_idx in range(n_class):
class_mean = score_sums[class_idx] / n_student
score_means.append(class_mean)
print('means of scores: ', score_means)
sums of scores: [180, 120]
means of scores: [60.0, 40.0]
'새싹 > TIL' 카테고리의 다른 글
[핀테커스] 230921 python 수학 실습 (1) | 2023.09.21 |
---|---|
[핀테커스] 230920 python 수학 실습 (0) | 2023.09.20 |
[핀테커스] 230918 데이터 시각화 라이브러리 실습 (1) | 2023.09.18 |
[핀테커스] 230915 미니프로젝트 (0) | 2023.09.15 |
[핀테커스] 230914 데이터 시각화 (3) | 2023.09.14 |