ゼロからの回帰  -  ワイン品質予測


前の記事では、機械学習の基本と回帰のタイプを取り上げました.本稿では、我々の最初の機械学習プロジェクトを行います.これは、異なるデータセットの回帰をどのように実装するかについての考えを与えます.それを設定し、理解し、コードを1時間かかる.だから始めましょう!😃

ここでの課題は、0 - 10のスケールで赤ワインの品質を予測することです.線形回帰を用いた回帰問題として解決した.
使用されるデータセットは、UCIのマシン学習リポジトリからのワインの品質データセットです.データセットを確認できますhere
入力変数は、固定酸性度、揮発性酸性度、クエン酸、残留糖、塩化物、遊離二酸化硫黄、総二酸化硫黄、密度、pH、硫酸塩、アルコールです.そして、出力変数(感覚データに基づいて)は品質(0と10の間のスコア)です.以下はデータセットの上位5行のスクリーンショットです.
トップ10行のワインの品質データセット

依存


コードはPythonです.これ以外に、PIPを使って以下のライブラリをインストールしてください.
  • パンダ: PIPをインストールする
  • MapProtLib : PPPのインストール
  • Numpy : PIPのインストール
  • SciKit Learn : 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
    
    データをパンダにデータを読み込みます.データセットの上位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 品質変数を含む.インx , 我々は残り砂糖を除くすべての機能を得る.必要に応じてしきい値を増やすことができます.
    # 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']
    
    を使用してトレーニングとテストを設定train_test_split . データの25 %は、テストの75 %のトレーニングに使用されます.データセットのサイズをチェックすることができますx_train.shape
    x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=3)
    
    トレーニングとテストのセットが作成されると、それはあなたの線形回帰モデルを構築する時間です.単に組み込みの関数を使用してモデルを作成することができますし、トレーニングデータに合う.訓練されるとcoef_ 各機能の係数の値を指定します.
    # 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_)
    
    このモデルを使用してワインの品質を予測するにはpredict() .
    train_pred = regressor.predict(x_train)
    print(train_pred)
    test_pred = regressor.predict(x_test) 
    print(test_pred)
    
    テストセットと同様に訓練のためのルート平均二乗誤差の計算ルート平均二乗誤差(RMSE)は、モデルと実際に観測された値によって予測される値(サンプルと個体群値)の違いの頻繁に使用される尺度です.私たちが良いモデルを構築したなら、トレーニングとテストセットのための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の増加につながるということを意味し、同様に他の機能のため.
    また、他のすべての機能を固定し、揮発性酸度の1単位の増加は、ワインの品質で0.99の減少につながると同様に、他の機能になります.
    したがって、いくつかの線のコードを用いて、RMSEスコア0.65と0.63のワインの品質を予測するための線形回帰モデルを構築することができた.これは、回帰を開始するためのアイデアです.しきい値、他の回帰モデルで再生することができますし、同様に機能工学をお試しください😍.
    コード全体を得るにはlink を返します.リポジトリをクローン化し、結果を見るためにノートブックを実行します.
    次の記事は分類と同様の小さなプロジェクトです.より多くのためにチューニング滞在!それまで楽しい学習😸