21.12.19 모의테스트
2021. 12. 19. 21:56ㆍ작업/머신러닝
#1 Numpy 배열 성분
import numpy as np
def solution():
prime = [2, 3, 5, 7, 11]
# 소수(prime number)를 기반으로 2차원 배열을 생성해보세요.
matrix = np.array(prime)
# 배열 matrix의 대각(diagonal) 성분을 추출해보세요.
matrix_dia = np.diag(matrix,k=0)
print(matrix_dia)
# 대각 성분의 합과 평균을 구해보세요.
dia_sum = np.sum(matrix_dia)
dia_mean = np.mean(matrix_dia)
return matrix, dia_sum, dia_mean
#출력을 위한 함수입니다.
def print_answer(**kwargs):
for key in kwargs.keys():
print(key,":", kwargs[key])
matrix, dia_sum, dia_mean = solution()
print_answer(matrix=matrix, dia_sum=dia_sum, dia_mean=dia_mean)
#2
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
'''
./data/Advertising.csv 에서 데이터를 읽어, X와 Y를 만듭니다.
X는 (200, 3) 의 shape을 가진 2차원 np.array,
Y는 (200,) 의 shape을 가진 1차원 np.array여야 합니다.
X는 FB, TV, Newspaper column 에 해당하는 데이터를 저장해야 합니다.
Y는 Sales column 에 해당하는 데이터를 저장해야 합니다.
'''
import csv
csvreader = csv.reader(open('data/Advertising.csv'))
X=[]
Y=[]
next(csvreader)
for line in csvreader:
# print(line)
x_i = [float(line[1]), float(line[2]), float(line[3])]
y_i = float(line[4])
X.append(x_i)
Y.append(y_i)
X = np.array(X)
Y = np.array(Y)
# 다항식 회귀분석을 진행하기 위해 변수들을 조합합니다.
X_poly = []
for x_i in X:
X_poly.append([
x_i[0] ** 2, # X_1^2
x_i[1], # X_2
x_i[1] * x_i[2], # X_2 * X_3
x_i[2] # X_3
])
# X, Y를 80:20으로 나눕니다. 80%는 트레이닝 데이터, 20%는 테스트 데이터입니다.
x_train, x_test, y_train, y_test = train_test_split(X_poly, Y, test_size=0.2, random_state=0)
# x_train, y_train에 대해 다항식 회귀분석을 진행합니다.
lrmodel = LinearRegression()
lrmodel.fit(x_train, y_train)
beta_0 = lrmodel.coef_[0] # 0번째 변수에 대한 계수 (페이스북) 0.00013709848099790274
beta_1 = lrmodel.coef_[1] # 1번째 변수에 대한 계수 (TV) 0.1943179287609083
beta_2 = lrmodel.coef_[2] # 2번째 변수에 대한 계수 (신문) -4.299807187801985e-06
beta_3 = lrmodel.intercept_ # y절편 (기본 판매량) 5.611214849579126
print(beta_0)
print(beta_1)
print(beta_2)
print(beta_3)
lrmodel.coef_[0]= 0.00013709848099790274
lrmodel.coef_[1]=0.1943179287609083
lrmodel.coef_[2]=-4.1299807187801985e-06
lrmodel.intercept_=5.2611214849579126
#x_train에 대해, 만든 회귀모델의 예측값을 구하고, 이 값과 y_train 의 차이를 이용해 MSE를 구합니다.
predicted_y_train = lrmodel.predict(x_train)
mse_train = mean_squared_error(y_train, predicted_y_train)
print("MSE on train data: {}".format(mse_train))
# x_test에 대해, 만든 회귀모델의 예측값을 구하고, 이 값과 y_test 의 차이를 이용해 MSE를 구합니다. 이 값이 1 미만이 되도록 모델을 구성해 봅니다.
predicted_y_test = lrmodel.predict(x_test)
mse_test = mean_squared_error(y_test, predicted_y_test)
print("MSE on test data: {}".format(mse_test))
#3
import numpy as np
import elice_utils
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.use("Agg")
eu = elice_utils.EliceUtils()
learning_rate = 1e-4
iteration = 10000
x = np.array([[8.70153760], [3.90825773], [1.89362433], [3.28730045], [7.39333004], [2.98984649], [2.25757240], [9.84450732], [9.94589513], [5.48321616]])
y = np.array([[5.64413093], [3.75876583], [3.87233310], [4.40990425], [6.43845020], [4.02827829], [2.26105955], [7.15768995], [6.29097441], [5.19692852]])
##입력값(x)과 변수(a,b)를 바탕으로 예측값을 출력하는 함수를 만들어 봅니다.
def prediction(a,b,x):
#1.Numpy 배열 a,b,x를 받아서 'x*(transposed)a + b'를 계산하는 식을 만듭니다.
equation = x*a + b
return equation
##변수(a,b)의 값을 어느정도 업데이트할 지를 정해주는 함수를 만들어 봅니다.
def update_ab(a,b,x,error,lr):
## a를 업데이트하는 규칙을 만듭니다..
delta_a = -(lr*(2/len(error))*(np.dot(x.T, error)))
## b를 업데이트하는 규칙을 만듭니다.
delta_b = -(lr*(2/len(error))*np.sum(error))
return delta_a, delta_b
# 반복횟수만큼 오차(error)를 계산하고 a,b의 값을 변경하는 함수를 만들어 봅니다.
def gradient_descent(x, y, iters):
## 초기값 a= 0, b=0
a = np.zeros((1,1))
b = np.zeros((1,1))
for i in range(iters):
#2.실제 값 y와 prediction 함수를 통해 예측한 예측값의 차이를 error로 정의합니다.
y_pred = prediction(a,b,x)
error = np.mean(np.square(y - y_pred)
#3.위에서 정의한 함수를 이용하여 a와 b 값의 변화값을 저장합니다.
a_delta, b_delta = update_ab(a,b,x,error,lr)
##a와 b의 값을 변화시킵니다.
a -= a_delta
b -= b_delta
return a, b
##그래프를 시각화하는 함수입니다.
def plotting_graph(x,y,a,b):
y_pred=a[0,0]*x+b
plt.scatter(x, y)
plt.plot(x, y_pred)
plt.savefig("test.png")
eu.send_image("test.png")
##실제 진행 절차를 확인할 수 있는 main함수 입니다.
def main():
a, b = gradient_descent(x, y, iters=iteration)
print("a:",a, "b:",b)
plotting_graph(x,y,a,b)
return a, b
main()
'작업 > 머신러닝' 카테고리의 다른 글
22.01.13 텐서플로우와 딥러닝 (0) | 2022.01.13 |
---|---|
22.01.12 딥러닝 개론 (0) | 2022.01.12 |
21.12.18 나이브베이즈 분류 (0) | 2021.12.19 |
21.12.18 회귀분석 (0) | 2021.12.19 |
21.12.18 선형대수 / Numpy (0) | 2021.12.19 |