처음부터 컴백 - 포도주 품질 예측
이곳의 임무는 한 조의 특징을 입력으로 정한 상황에서 0-10의 범위 내에서 붉은 포도주의 질을 예측하는 것이다.나는 이미 선형 회귀를 회귀 문제로 삼아 그것을 해결했다.
사용된 데이터 세트는 UCI 머신러닝 라이브러리의 와인 품질 데이터 세트입니다.데이터 세트 확인 가능here
입력 변수는 고정산도, 휘발성산도, 레몬산, 잔류당, 염화물, 유리이산화황, 총이산화황, 밀도, pH치, 황산염, 알코올이다.출력 변수(감각적 데이터 기반)는 질량(분수는 0에서 10 사이)이다.다음은 데이터 집합 전 5줄의 화면 캡처입니다.
포도주 품질 데이터 집합 전 5행
의존항
코드는python으로 작성되었습니다.이외에 pip를 사용하여 다음 라이브러리를 설치하십시오.
방법
새 IPython 노트북을 만들고 다음 코드를 삽입하여 필요한 모듈을 가져옵니다.만약 오류가 발생하면 pip를 사용하여 필요한 패키지를 설치하십시오.
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn import metrics
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
pandas를 사용하여 데이터를 데이터 프레임에 읽습니다.데이터 세트의 처음 5 행을 확인하려면df.head()
df = pd.read_csv('winequality-red.csv')
df.head()
corr()
를 사용하여 데이터 세트의 각 속성 간의 상관성 찾기# there are no categorical variables. each feature is a number. Regression problem.
# Given the set of values for features, we have to predict the quality of wine.
# finding correlation of each feature with our target variable - quality
correlations = df.corr()['quality'].drop('quality')
print(correlations)
각 속성과 목표 변수 간의 상관성 — 질량열도를 그리고 상세한 관련성을 얻으려면 다음 코드를 삽입하십시오.
sns.heatmap(df.corr())
plt.show()
열도함수
get_features()
를 정의합니다. 이 함수는 관련성이 한도값보다 높은 특징만 출력합니다(함수에 입력 매개 변수로 전달).def get_features(correlation_threshold):
abs_corrs = correlations.abs()
high_correlations = abs_corrs
[abs_corrs > correlation_threshold].index.values.tolist()
return high_correlations
입력 피쳐를 포함하고 x
질량 변수를 포함하는 두 벡터를 생성합니다.y
에서 우리는 잔류당을 제외한 모든 특징을 얻었다.필요한 경우 임계값을 추가할 수 있습니다.# taking features with correlation more than 0.05 as input x and quality as target variable y
features = get_features(0.05)
print(features)
x = df[features]
y = df['quality']
x
를 사용하여 교육 및 테스트 세트를 만듭니다.25퍼센트의 데이터는 테스트에 사용되고 75%는 교육에 사용된다.train_test_split
를 사용하여 데이터 세트의 크기를 확인할 수 있습니다.x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=3)
일단 훈련집과 테스트집을 만들면 선형 회귀 모델을 구축할 수 있다.내장 함수를 간단하게 사용하여 모델을 만들고 훈련 데이터에 적응할 수 있습니다.훈련 후 x_train.shape
각 특징의 계수치를 제시한다.# fitting linear regression to training data
regressor = LinearRegression()
regressor.fit(x_train,y_train)
# this gives the coefficients of the 10 features selected above.
print(regressor.coef_)
이 모델로 포도주의 질을 예측해 사용coef_
.train_pred = regressor.predict(x_train)
print(train_pred)
test_pred = regressor.predict(x_test)
print(test_pred)
훈련집과 시험집의 균방근 오차를 계산하다.균일 루트 오차(RMSE)는 모델 예측 값(샘플 값과 전체 값)과 실제 관찰 값 사이의 차이를 평가하는 데 자주 사용되는 방법이다.만약 우리가 좋은 모델을 세웠다면 훈련 집합과 테스트 집합의 RMSE는 매우 비슷할 것이다.만약 테스트 집합의 균방근 오차가 훈련 집합의 균방근 오차보다 훨씬 높다면 우리가 데이터를 과도하게 작성했을 가능성이 높다.# calculating rmse
train_rmse = mean_squared_error(train_pred, y_train) ** 0.5
print(train_rmse)
test_rmse = mean_squared_error(test_pred, y_test) ** 0.5
print(test_rmse)
# rounding off the predicted values for test set
predicted_data = np.round_(test_pred)
print(predicted_data)
print('Mean Absolute Error:', metrics.mean_absolute_error(y_test, test_pred))
print('Mean Squared Error:', metrics.mean_squared_error(y_test, test_pred))
print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test, test_pred)))
# displaying coefficients of each feature
coeffecients = pd.DataFrame(regressor.coef_,features) coeffecients.columns = ['Coeffecient']
print(coeffecients)
각 피쳐의 계수이 숫자들은 모든 다른 특징이 변하지 않는 상황에서 황산염이 1개 단위를 증가하면 포도주의 질이 0.8개 증가하고 다른 특징도 0.8개 단위가 증가한다는 것을 의미한다.
모든 다른 특징이 변하지 않는 상황에서 휘발성 산도는 1개 단위가 증가할 때마다 포도주의 질이 0.99 떨어지고 다른 특징도 떨어진다.
따라서 몇 줄의 코드를 통해 우리는 선형 회귀 모델을 구축하여 포도주의 질을 예측할 수 있다. 훈련집과 테스트집의 RMSE 점수는 각각 0.65와 0.63이다.복귀부터 도와줄 생각일 뿐이야.임계값과 다른 회귀 모델을 사용하거나 특징 공정을 시도할 수 있습니다😍.
전체 코드를 얻으려면 이 link 를 사용하여 저장소로 가세요.데이터 세트도 업로드됩니다:) 저장소를 복제하고 결과를 보려면 노트북을 실행합니다.
다음 글은 분류와 유사한 작은 항목을 토론할 것이다.더 많은 관심 부탁드립니다!그때까지 즐겁게 공부하다😸
Reference
이 문제에 관하여(처음부터 컴백 - 포도주 품질 예측), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/apoorvadave/regression-from-scratch---wine-quality-prediction-3245텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)