import matplotlib.pyplot as plt
%matplotlib inline
x= range(1,11)
y=[]
for data in x:
y.append(data*2)
## 같은 연산
y=[2*data for data in x]
위 데이터는 $y = 2x$에요.
plt.scatter(x,y)
우리가 이러한 그래프를 보았을 때 우리는 구체적인 값을 몰라도, x가 올라가면서 y가 올라간다는 것을 알 수 있어요.
import pandas as pd
wine=pd.read_csv('https://ocw.mit.edu/courses/sloan-school-of-management/15-097-prediction-machine-learning-and-statistics-spring-2012/datasets/wine.csv',header=None)
Alcohol=list(wine.ix[:,0]);
Acid=list(wine.ix[:,1]);
proline=list(wine.ix[:,12])
plt.scatter(Acid,proline,c=Alcohol)
저번 시간에 봤던 예제죠? 이 그래프는 알코올을 기준으로 색깔을 나뉘었는데, 알코올이 얼마이냐에 따라서 집단(군집)이 나뉘어지는 것을 볼 수 있어요. 사람은 그래프를 보면서 어딜 기준으로 집단을 나눌 수 있겠구나 생각하는 것처럼 기계에도 어느 기준으로 집단을 분류하라는 것이 분류문제에요.
그러면 컴퓨터는 어떻게 값을 예측하는 지 살펴볼까요?
from sklearn.linear_model import LinearRegression
linearmodel= LinearRegression()
X=pd.Series(x)
y=pd.Series(y)
X=X.reshape(-1,1)
linearmodel.fit(X,y)
predicted=linearmodel.predict(X)
plt.plot(X,predicted)
# x의 계수는?
linearmodel.coef_
$y = 2x$와 같은 쉬운 문제는 정확하게 맞출 수 있죠?
조금 더 어려운 문제라면?
linearmodel= LinearRegression()
X=wine.ix[:,1]
X=X.reshape(-1,1)
linearmodel.fit(X,wine.ix[:,3])
predicted=linearmodel.predict(X)
plt.scatter(wine.ix[:,1],wine.ix[:,3])
plt.plot(X,predicted,color='red')
컴퓨터는 직선으로만 값을 예측하고 있는데, 실제값은 차이가 많이나죠? 이러한 차이를 오차라고 불러요. 뒤에 분류문제에 대한 예측값을 보면 이해가 더 쉬울거에요.
from sklearn.linear_model import LogisticRegression
logistic=LogisticRegression()
logistic.fit(wine.ix[:,[1,12]],wine.ix[:,0])
predicted=logistic.predict(wine.ix[:,[1,12]])
plt.figure(1)
plt.subplot(221)
plt.scatter(wine.ix[:,1],wine.ix[:,12],c=predicted)
plt.title("Predicted")
plt.subplot(222)
plt.scatter(Acid,proline,c=Alcohol)
plt.title("Actual")