前提・実現したいこと
連日の投稿になります。
L1正則化付きロジスティック回帰の図を表示させたい。
発生している問題・エラーメッセージ
エラーメッセージは発生していないが、図がalcoholしか表示されない。
該当のソースコード
Python
1import pandas as pd 2import numpy as np 3df_wine = pd.read_csv( 4 'https://raw.githubusercontent.com/tirthajyoti/Machine-Learning-with-Python/master/Datasets/wine.data.csv', header = 0) 5 6df_wine.columns = ['Class label', 'Alcohol', 'Malic acid', 'Ash', 7 'Alcalinity of ash', 'Magnesium', 'Total phenols', 'Flavanoids', 8 'Nonflavanoid phenols', 'Proanthocyanis', 'Color intenesity', 'Hue', 9 'OD280/OD315 of diluted wines', 'Proline'] 10 11 12print('Class labels', np.unique(df_wine['Class label'])) 13df_wine.head() 14 15from sklearn.model_selection import train_test_split 16X, y = df_wine.iloc[:, 1].values, df_wine.iloc[:, 0].values 17 18X_train, X_test, y_train, y_test = \ 19 train_test_split(X.reshape(-1, 1), y.reshape(-1, 1), test_size = 0.3, random_state = 0, stratify = y) 20 21from sklearn.preprocessing import MinMaxScaler 22mms = MinMaxScaler() 23X_train_norm = mms.fit_transform(X_train) 24X_test_norm = mms.transform(X_test) 25 26ex = np.array([0, 1, 2, 3, 4, 5]) 27print('standardized:', (ex - ex.mean()) / ex.std()) 28print('normalized:', (ex - ex.min()) / (ex.max() - ex.min())) 29 30from sklearn.preprocessing import StandardScaler 31stdsc = StandardScaler() 32X_train_std = stdsc.fit_transform(X_train) 33X_test_std = stdsc.transform(X_test) 34 35from sklearn.linear_model import LogisticRegression 36LogisticRegression(penalty = 'l1') 37 38lr = LogisticRegression(penalty = 'l1', C = 1.0, solver = 'liblinear') 39lr.fit(X_train_std, y_train.ravel()) 40print('Training accuracy:', lr.score(X_train_std, y_train)) 41print('Test accuracy:', lr.score(X_test_std, y_test)) 42lr.intercept_ 43lr.coef_ 44 45import matplotlib.pyplot as plt 46fig = plt.figure() 47ax = plt.subplot(111) 48colors = ['blue', 'green', 'red', 'cyan', 'magenta', 'yellow', 'black', 49 'pink', 'lightgreen', 'lightblue', 'gray', 'indigo', 'orange'] 50 51weights, params = [], [] 52 53for c in np.arange(-4., 6.): 54 lr = LogisticRegression(penalty = 'l1', C = 10.**c, solver = 'liblinear', random_state = 0) 55 lr.fit(X_train_std, y_train.ravel()) 56 weights.append(lr.coef_[1]) 57 params.append(10**c) 58 59weights = np.array(weights) 60 61for column, color in zip(range(weights.shape[1]), colors): 62 plt.plot(params, weights[:, column], label = df_wine.columns[column + 1], color = color) 63 64plt.axhline(0, color = 'black', linestyle = '--', linewidth = 3) 65plt.xlim([10**(-5), 10**5]) 66plt.ylabel('weight coefficient') 67plt.xscale('log') 68plt.legend(loc = 'upper left') 69ax.legend(loc = 'upper center', bbox_to_anchor = (1.38, 1.03), ncol = 1, fancybox = True) 70plt.show()
試したこと
Training accuracy:とTest accuracy:、lr.intercept_、lr.coef_の値がおかしいので、そのあたりを変更してみたのですが、改善しませんでした。
補足情報(ツールのバージョンなど)
anaconda JupiterLab 1.2.6
今回のコードが載っている教科書:[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)
回答1件
あなたの回答
tips
プレビュー