고양이의 데이터 과학: 제5부분

데이터를 모델에 맞추기: 분류와 회귀


오늘, 너는 이미 너의 호맨으로 몇 가지 일을 예측할 준비가 되어 있다.너는 어떻게 했니?호만은 네가 이 점을 해낼 수 있는 모델이 필요하다고 말했다.그럼 모형이 뭐예요?호만은 너에게 이렇게 생각한다고 말했다. 너는 너의 친구를 찾아가서, 그는 수학을 많이 안다. 너는 그에게 데이터 집합을 주고, 그리고 그는 계산하고, 너에게 예측을 준다.

여기서 당신의 친구는 기계입니다. 그/그녀가 모든 수학 계산을 배우는 방식을 기계학습이라고 합니다.그/그녀는 새로운 것을 어떻게'학습'하는지 알고 있으며, 그/그녀는 당신이 제공한 데이터로 가능한 예측을 배웁니다.호만은 그가 어떻게 그의 기계 친구와 함께 예측을 찾아냈는지 너에게 알려줄 것이다.물론 당신의 기계 친구는 수학을 많이 할 줄 압니다. 당신은 여가 시간에 이 수학들을 보아야 합니다.
처음에 호만과 함께 발견한 세 가지 문제 기억나세요?너는 데이터에서 이 문제들의 답을 찾을 수 있는지 없는지를 보게 될 것이다.
첫 번째 문제는 참치 맛 감자튀김을 원하거나 원하지 않는 사람이 있느냐는 것이다.호만은 단지 몇 개의 데이터 포인트를 얻었을 뿐 모두에게 보여주기 위해서였기 때문에 모델의 정확성이 높지 않을 것이며 다시 말하면 모델이 약간의 오류를 범할 것이라고 말했다.네가 제공한 데이터가 많을수록 정확도가 높아진다.
우선, hooman은 csv 파일에서 14줄의 데이터를 불러옵니다.모델은 이 데이터에서 당신의 문제와 해결 방안을 이해할 것입니다.당신은 14마리의 고양이의 나이, 체중, 수면 시간, 매일 감자튀김을 얼마나 먹고, 매일 참치를 얼마나 먹고, 매일 몇 끼의 밥을 먹는지 데이터를 가지고 있습니다.참치칩도 달라고?너는 이미 데이터를 정리했다. 호맨이 일찍이 너에게 보여준 것처럼, 고양이의 이러한 습관 중 어떤 것들이 참치칩에 대한 수요와 더욱 현저한 관련이 있는지 발견할 수 있을 것이다.
import pandas as pd
from sklearn.model_selection import train_test_split 
from sklearn import metrics 
from sklearn.svm import SVC #SVM classifier

likestuna = pd.read_csv("likestuna - Sheet1.csv")
corrMatrix = likestuna.corr()
corrMatrix
파일의 처음 5 행은 다음과 같습니다.

출력 행렬은 다음과 같습니다.

관련 행렬에서 키티스가 칩을 좋아하거나 싫어하는 요소에 영향을 주는 수량을 줄일 수 있다.따라서 피쳐로 간주됩니다.이러한 특성을 이용하여 당신의 모델은 고양이가 참치맛 감자칩에 대한 취향을 예측할 수 있습니다.(나는 이 부분을 다시 쓸 것이다. 내가 지금 눈 문제를 처리할 때, 일단 기분이 좋아지면 다시 한 번 설명할 것이다. 지금 우리는 이미 몇 가지 문제를 줄였다.)
호만은 서류를 두 부분으로 나눌 것이라고 말했다. 훈련집과 테스트집이다.훈련집은 무작위로 85% 의 데이터를 선택해 모형 고양이의 어떤 습관이 참치 조각처럼 생겼는지 가르친다.나머지 15퍼센트의 데이터는 모델 작업의 정확성을 측정하는 데 쓰일 것이다.이곳에서 우리는 이미 14마리의 고양이의 호불호를 안다.따라서 우리는 테스트 데이터 집합의 결과를 쉽게 검증할 수 있다.호만은 다음과 같이 썼다.
feature_cols = ['Weight','Potato per day','Chips per day', 'Tuna per day', 'Meal count']
X = likestuna[feature_cols]
y = likestuna['Wants tuna chips']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15)
X_test
X 테스트에는 테스트 데이터가 포함됩니다.이 경우 다음과 같습니다.

우리는 이 새끼 고양이 세 마리가 참치 조각을 원하는지 이미 알고 있다.#5와 #3 고양이는'참치 감자튀김을 원한다'는 값이 1이기 때문에 참치 감자튀김을 원한다.한편 #4 고양이는 참치 감자튀김을 원하지 않는다.후먼은 예측 결과가 어떻게 나올지'SVM'(벡터기 지원)이라는 모델을 시도하고 싶다고 말했다.
svm = SVC(kernel="linear", C=0.025)
svm.fit(X_train, y_train)
y_pred = svm.predict(X_test)
y_pred
출력은 수조([1,0,0])로 테스트 집합cat의 첫 번째를 의미한다. 즉, #5cat은 참치 조각을 원하고 다른 두 개, #4와 #3은 원하지 않는다는 것이다.봐라, 이것은 잘못이다.호만은 너에게 보여주었다.
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))
이는 세 가지 예측 중 하나가 틀렸기 때문에 정확도가 0.6666이라는 것을 보여준다.데이터 세트가 클수록 예측이 정확합니다.
이것은 네가 수중에 가지고 있는 데이터에서 얻은 것이다.#15 고양이가 있다면?15번째 고양이가 참치 조각을 원하는지 예측할 수 있습니까?호만은 네가 할 수 있다고 말했다.
data = [[4.7, 4, 1.75, 3.3, 3]]
df = pd.DataFrame(data, columns = ['Weight','Potato per day','Chips per day', 'Tuna per day', 'Meal count'])
svm.predict(df)
수조([0])는 15번째 고양이가 참치 조각을 원하지 않는다는 뜻이다.물론 실수할 수도 있다. 왜냐하면 너의 모형이 완벽하지 않기 때문이다.
너는 벡터기만 지원하여 예측할 수 있니?아니지.호만은 예측할 수 있는 다른 기술도 많다고 말했다.예를 들어 호만은 다른 것을 매우 좋아한다.그것은 무작위 숲이라고 불린다.호만은 SVM을 실행하는 훈련과 테스트 집합에서 무작위 숲 기술을 실행한다.
from sklearn.ensemble import RandomForestClassifier #random forest classifier
rf=RandomForestClassifier(n_estimators=100)
rf.fit(X_train,y_train)
y_pred=rf.predict(X_test)
y_pred
이곳의 출력은 수조로 변한다([1,1,0]).봐라, 이번에는 두 가지 잘못이 있다.그래서 정확도가 비교적 낮다. 이런 상황에서 0.33이다.호만은 다른 방법을 시도해서 결과와 정확성을 비교하고 어떤 것이 당신에게 더 적합한지 봐야 한다고 말했다.
지금 호만은 두 번째 문제를 해결하고 싶다고 한다.당신은 어떻게 가격을 정할 계획입니까?그는 이전에 이미 너에게 설명한 적이 있는데, 이것은 회귀 문제이다.너의 데이터는 칩 한 봉지의 무게와 가격 두 부분으로 되어 있다.
tuna2 = pd.read_csv("likestuna - Sheet2.csv") 
tuna2

호만은 그것들을 다음과 같이 묘사하려고 시도했다.
import matplotlib.pyplot as plt
from matplotlib import pylab
from pylab import *

tuna2.plot(x='Weight (oz)', y='Price($)', style='o')
plt.title('Weight vs Price')
plt.xlabel('weight')
plt.ylabel('price')
z = np.polyfit(tuna2['Weight (oz)'], tuna2['Price($)'], 1)
p = np.poly1d(z)
pylab.plot(tuna2['Weight (oz)'],p(tuna2['Weight (oz)']),"r--")
plt.show()

봐라, 서로 다른 권중의 가격 모델은 대체로 일직선, 그림의 붉은 선과 유사하다.주어진 무게의 근사한 가격을 찾아내려면, 붉은 선에서 이 무게의 가격 위치를 찾아내기만 하면 된다.

호만은 지금 이 선으로 예측을 찾아내려고 시도하고 있다.
X = tuna2.iloc[:, :-1].values
y = tuna2.iloc[:, 1].values
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)
y_pred = regressor.predict(X_test)
y_pred
답은 이렇다. 수조([2.91206515,4.11357766,2.67176265])
이제 처음 관점과 얼마나 다른지 살펴보자.
df = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred})
df

가깝죠?
지금 너는 알 수 없는 크기의 가방을 예측해 보아라. 예를 들어 25온스:
regressor.predict([[25]])
정답은 수조([4.47403141])로 가격이 4.5달러 안팎이어야 한다는 뜻이다.너는 지금 대략적인 가격이 어떤 크기의 가방을 찾을 수 있다. 예!
호만아, 이 모형이 얼마나 정확한지 물어봐.호만은 너에게 어떻게 답을 찾는지 보여 주었다.우선, 너는 모델의'균방근 오차'를 찾아야 한다.너는 이후에 이 잘못된 수학 방법을 발견하는 것을 검사하는 것이 좋겠다.
from sklearn import metrics 
print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))
오차는 0.280631222467514였다.이것은 좋은 일입니까, 나쁜 일입니까?어떻게 알았어요?호만은 모든 가격의 평균치를 먼저 검사해야 한다고 말했다.만약 이 균방근 오차치가 평균치의 10%보다 낮다면 모델은 양호하다.
tuna2.describe()

현재 3.287273의 10%는 0.3287273이다.너의 균방근 오차가 이것보다 낮기 때문에 너의 모델은 좋은 것으로 여겨질 수 있다.축하합니다!

좋은 웹페이지 즐겨찾기