Inhaltsverzeichnis Kapitel 1: Lineares Regressionsmodell [Kapitel 2: Nichtlineares Regressionsmodell] (https://qiita.com/matsukura04583/items/baa3f2269537036abc57) [Kapitel 3: Logistisches Regressionsmodell] (https://qiita.com/matsukura04583/items/0fb73183e4a7a6f06aa5) [Kapitel 4: Hauptkomponentenanalyse] (https://qiita.com/matsukura04583/items/b3b5d2d22189afc9c81c) [Kapitel 5: Algorithmus 1 (k-Nachbarschaftsmethode (kNN))] (https://qiita.com/matsukura04583/items/543719b44159322221ed) [Kapitel 6: Algorithmus 2 (k-Mittel)] (https://qiita.com/matsukura04583/items/050c98c7bb1c9e91be71) [Kapitel 7: Support Vector Machine] (https://qiita.com/matsukura04583/items/6b718642bcbf97ae2ca8)
Es unterscheidet sich nicht wesentlich vom linearen Modell, nur das lineare Mapping wird mit dem Teil
Häufig verwendete Basisfunktionen
Polygonfunktion
Gaußsche Basisfunktion
Spline-Funktion / B-Spline-Funktion
Nichtlineare Regression basierend auf eindimensionaler Basisfunktion
Nichtlineare Regression basierend auf zweidimensionaler Basisfunktion
Unter- und Überanpassung
Ein Modell, für das kein ausreichend kleiner Fehler für die Trainingsdaten erhalten werden kann → Nicht trainiert
(Gegenmaßnahme 1) Verwenden Sie ein Modell mit hoher Ausdruckskraft, da die Ausdruckskraft des Modells gering ist.
(Gegenmaßnahme 2) ** Löschen Sie unnötige Basisfunktionen (Variablen) **, um die Ausdruckskraft zu unterdrücken
(Gegenmaßnahme 3) Unterdrücken Sie die Ausdruckskraft mithilfe der Regularisierungsmethode
Entfernen Sie unnötige Basisfunktionen
Die Komplexität des Modells ändert sich je nach Anzahl, Position und Bandbreite der Basisfunktionen
Wenn Sie viele Basisfunktionen für das Problem vorbereiten, das Sie lösen möchten, treten Überlernprobleme auf. Bereiten Sie daher geeignete Basisfunktionen vor (Auswahl durch Lebenslauf usw.).
Regularisierungsmethode (Bestrafungsmethode)
Minimieren Sie "eine Funktion, die einen Regularisierungsterm (Strafterm) auferlegt, dessen Wert mit der Komplexität des Modells zunimmt"
Regularisierungsfrist (Straffrist)
Abhängig von der Form gibt es verschiedene Typen, von denen jeder unterschiedliche Schätzungseigenschaften aufweist.
Regularisierungsparameter (Glättungsparameter)
Passen Sie die Glätte der Kurve des Modells an. ▶ Sie müssen sich richtig entscheiden
Rolle der Regularisierungsfrist (Strafzeit)
Keine ▶ Minimale quadratische Schätzung
Verwenden Sie die L2-Norm ▶ ** Ridge-Schätzung </ font> **
Verwenden Sie die L1-Norm ▶ ** Lasso-Schätzung </ font> **
Rolle des regulierten Paraters
Klein ▶ Große Einschränkung
Groß ▶ Kleine Randfläche
Ob Ihr Modell in den Daten verlernt oder überfordert ist
Sowohl Trainingsfehler als auch Testfehler sind gering. ▶ Möglichkeit eines verallgemeinerten Modells
Kleiner Trainingsfehler, aber großer Testfehler ▶ Überlernen
Weder Trainingsfehler noch Testfehler werden klein ▶ verlernt
Im Falle einer Regression wird die Lösung explizit erhalten (Vergleich der Werte von Trainingsfehler und Trainingsfehler) 52 Nichtlineares Regressionsmodell
Holdout-Methode
Teilen Sie endliche Daten in zwei Teile, einen für das Training und einen für das Testen, und verwenden Sie sie, um die "Vorhersagegenauigkeit" und die "Fehlerrate" zu schätzen.
Wenn Sie die Anzahl für das Lernen erhöhen, verringert sich die Anzahl für das Testen und die Lerngenauigkeit verbessert sich, aber die Genauigkeit der Leistungsbewertung verschlechtert sich.
Im Gegenteil, wenn die Anzahl der Tests erhöht wird, verringert sich der Lernaufwand, sodass sich die Genauigkeit des Lernens selbst verschlechtert.
Es gibt einen Nachteil, dass es keine gute Leistungsbewertung gibt, es sei denn, es ist eine große Datenmenge verfügbar. Wenn Sie es beispielsweise in zwei Teile teilen, besteht das Risiko, dass die verlorenen Daten nur an einen von ihnen gesendet werden.
Im nichtlinearen Regressionsmodell, das auf der Basiserweiterungsmethode basiert, werden Anzahl, Position, Bandbreitenwert und Abstimmungsparameter der Basisfunktion durch das Modell bestimmt, das den Holdout-Wert reduziert. 53 Nichtlineares Regressionsmodell
Die folgenden Verifizierungsdaten und Trainingsdaten werden für jeden Iterator getrennt und das Modell wird vorbereitet. Nachfolgend finden Sie ein Beispiel für die Aufteilung der Daten in 5 Teile für Schulung und Bewertung. Wichtig ist, dass die Verifizierungsdaten und Trainingsdaten nicht erfasst werden.
Selbst wenn die Genauigkeit bei der Überprüfung durch die Holdout-Überprüfungsmethode 70% und bei CV 65% beträgt, wird CV zur Schätzung der Generalisierungsleistung verwendet. Die Kreuzvalidierung bietet eine höhere Generalisierungsleistung als die Holdout-Überprüfungsmethode.
Google Drive Mount
from google.colab import drive
drive.mount('/content/drive')
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#Seaborn Einstellungen
sns.set()
#Hintergrundänderung
sns.set_style("darkgrid", {'grid.linestyle': '--'})
#Größe(Skalenänderung)
sns.set_context("paper")
n=100
def true_func(x):
z = 1-48*x+218*x**2-315*x**3+145*x**4
return z
def linear_func(x):
z = x
return z
#Generieren Sie verrauschte Daten aus echten Funktionen
#Datengenerierung aus einer echten Funktion
data = np.random.rand(n).astype(np.float32)
data = np.sort(data)
target = true_func(data)
#Rauschen hinzufügen
noise = 0.5 * np.random.randn(n)
target = target + noise
#Zeichnen Sie Daten mit Rauschen
plt.scatter(data, target)
plt.title('NonLinear Regression')
plt.legend(loc=2)
from sklearn.linear_model import LinearRegression
clf = LinearRegression()
data = data.reshape(-1,1)
target = target.reshape(-1,1)
clf.fit(data, target)
p_lin = clf.predict(data)
plt.scatter(data, target, label='data')
plt.plot(data, p_lin, color='darkorange', marker='', linestyle='-', linewidth=1, markersize=6, label='linear regression')
plt.legend()
print(clf.score(data, target))
from sklearn.kernel_ridge import KernelRidge
clf = KernelRidge(alpha=0.0002, kernel='rbf')
clf.fit(data, target)
p_kridge = clf.predict(data)
plt.scatter(data, target, color='blue', label='data')
plt.plot(data, p_kridge, color='orange', linestyle='-', linewidth=3, markersize=6, label='kernel ridge')
plt.legend()
#plt.plot(data, p, color='orange', marker='o', linestyle='-', linewidth=1, markersize=6)
#Ridge
from sklearn.metrics.pairwise import rbf_kernel
from sklearn.linear_model import Ridge
kx = rbf_kernel(X=data, Y=data, gamma=50)
#KX = rbf_kernel(X, x)
#clf = LinearRegression()
clf = Ridge(alpha=30)
clf.fit(kx, target)
p_ridge = clf.predict(kx)
plt.scatter(data, target,label='data')
for i in range(len(kx)):
plt.plot(data, kx[i], color='black', linestyle='-', linewidth=1, markersize=3, label='rbf', alpha=0.2)
#plt.plot(data, p, color='green', marker='o', linestyle='-', linewidth=0.1, markersize=3)
plt.plot(data, p_ridge, color='green', linestyle='-', linewidth=1, markersize=3,label='ridge regression')
#plt.legend()
print(clf.score(kx, target))
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline
#PolynomialFeatures(degree=1)
deg = [1,2,3,4,5,6,7,8,9,10]
for d in deg:
regr = Pipeline([
('poly', PolynomialFeatures(degree=d)),
('linear', LinearRegression())
])
regr.fit(data, target)
# make predictions
p_poly = regr.predict(data)
# plot regression result
plt.scatter(data, target, label='data')
plt.plot(data, p_poly, label='polynomial of degree %d' % (d))
#Lasso
from sklearn.metrics.pairwise import rbf_kernel
from sklearn.linear_model import Lasso
kx = rbf_kernel(X=data, Y=data, gamma=5)
#KX = rbf_kernel(X, x)
#lasso_clf = LinearRegression()
lasso_clf = Lasso(alpha=10000, max_iter=1000)
lasso_clf.fit(kx, target)
p_lasso = lasso_clf.predict(kx)
plt.scatter(data, target)
#plt.plot(data, p, color='green', marker='o', linestyle='-', linewidth=0.1, markersize=3)
plt.plot(data, p_lasso, color='green', linestyle='-', linewidth=3, markersize=3)
print(lasso_clf.score(kx, target))
from sklearn import model_selection, preprocessing, linear_model, svm
# SVR-rbf
clf_svr = svm.SVR(kernel='rbf', C=1e3, gamma=0.1, epsilon=0.1)
clf_svr.fit(data, target)
y_rbf = clf_svr.fit(data, target).predict(data)
# plot
plt.scatter(data, target, color='darkorange', label='data')
plt.plot(data, y_rbf, color='red', label='Support Vector Regression (RBF)')
plt.legend()
plt.show()
Ergebnis
/usr/local/lib/python3.6/dist-packages/sklearn/utils/validation.py:724: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
y = column_or_1d(y, warn=True)
/usr/local/lib/python3.6/dist-packages/sklearn/utils/validation.py:724: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
y = column_or_1d(y, warn=True)
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.1, random_state=0)
from keras.callbacks import EarlyStopping, TensorBoard, ModelCheckpoint
cb_cp = ModelCheckpoint('/content/drive/My Drive/study_ai_ml/skl_ml/out/checkpoints/weights.{epoch:02d}-{val_loss:.2f}.hdf5', verbose=1, save_weights_only=True)
cb_tf = TensorBoard(log_dir='/content/drive/My Drive/study_ai_ml/skl_ml/out/tensorBoard', histogram_freq=0)
def relu_reg_model():
model = Sequential()
model.add(Dense(10, input_dim=1, activation='relu'))
model.add(Dense(1000, activation='relu'))
model.add(Dense(1000, activation='relu'))
model.add(Dense(1000, activation='relu'))
model.add(Dense(1000, activation='relu'))
model.add(Dense(1000, activation='relu'))
model.add(Dense(1000, activation='relu'))
model.add(Dense(1000, activation='relu'))
model.add(Dense(1000, activation='linear'))
# model.add(Dense(100, activation='relu'))
# model.add(Dense(100, activation='relu'))
# model.add(Dense(100, activation='relu'))
# model.add(Dense(100, activation='relu'))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
return model
from keras.models import Sequential
from keras.layers import Input, Dense, Dropout, BatchNormalization
from keras.wrappers.scikit_learn import KerasRegressor
# use data split and fit to run the model
estimator = KerasRegressor(build_fn=relu_reg_model, epochs=100, batch_size=5, verbose=1)
history = estimator.fit(x_train, y_train, callbacks=[cb_cp, cb_tf], validation_data=(x_test, y_test))
Ergebnis
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:66: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:541: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:4432: The name tf.random_uniform is deprecated. Please use tf.random.uniform instead.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/optimizers.py:793: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:1033: The name tf.assign_add is deprecated. Please use tf.compat.v1.assign_add instead.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:1020: The name tf.assign is deprecated. Please use tf.compat.v1.assign instead.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:3005: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.
Train on 90 samples, validate on 10 samples
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:190: The name tf.get_default_session is deprecated. Please use tf.compat.v1.get_default_session instead.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:197: The name tf.ConfigProto is deprecated. Please use tf.compat.v1.ConfigProto instead.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:207: The name tf.global_variables is deprecated. Please use tf.compat.v1.global_variables instead.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:216: The name tf.is_variable_initialized is deprecated. Please use tf.compat.v1.is_variable_initialized instead.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:223: The name tf.variables_initializer is deprecated. Please use tf.compat.v1.variables_initializer instead.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/callbacks.py:1122: The name tf.summary.merge_all is deprecated. Please use tf.compat.v1.summary.merge_all instead.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/callbacks.py:1125: The name tf.summary.FileWriter is deprecated. Please use tf.compat.v1.summary.FileWriter instead.
Epoch 1/100
90/90 [==============================] - 2s 17ms/step - loss: 1.7399 - val_loss: 0.4522
Epoch 00001: saving model to /content/drive/My Drive/study_ai_ml/skl_ml/out/checkpoints/weights.01-0.45.hdf5
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-19-26d4341f0e70> in <module>()
6 estimator = KerasRegressor(build_fn=relu_reg_model, epochs=100, batch_size=5, verbose=1)
7
----> 8 history = estimator.fit(x_train, y_train, callbacks=[cb_cp, cb_tf], validation_data=(x_test, y_test))
8 frames
/usr/local/lib/python3.6/dist-packages/h5py/_hl/files.py in make_fid(name, mode, userblock_size, fapl, fcpl, swmr)
146 fid = h5f.create(name, h5f.ACC_EXCL, fapl=fapl, fcpl=fcpl)
147 elif mode == 'w':
--> 148 fid = h5f.create(name, h5f.ACC_TRUNC, fapl=fapl, fcpl=fcpl)
149 elif mode == 'a':
150 # Open in append mode (read/write).
h5py/_objects.pyx in h5py._objects.with_phil.wrapper()
h5py/_objects.pyx in h5py._objects.with_phil.wrapper()
h5py/h5f.pyx in h5py.h5f.create()
OSError: Unable to create file (unable to open file: name = '/content/drive/My Drive/study_ai_ml/skl_ml/out/checkpoints/weights.01-0.45.hdf5', errno = 2, error message = 'No such file or directory', flags = 13, o_flags = 242)
y_pred = estimator.predict(x_train)
Ergebnis
90/90 [==============================] - 0s 1ms/step
plt.title('NonLiner Regressions via DL by ReLU')
plt.plot(data, target, 'o')
plt.plot(data, true_func(data), '.')
plt.plot(x_train, y_pred, "o", label='predicted: deep learning')
#plt.legend(loc=2)
print(lasso_clf.coef_)
Ergebnis
[-0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0.
-0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0. -0.
-0. -0. -0. -0. -0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
Verwandte Seiten
Kapitel 1: Lineares Regressionsmodell [Kapitel 2: Nichtlineares Regressionsmodell] (https://qiita.com/matsukura04583/items/baa3f2269537036abc57) [Kapitel 3: Logistisches Regressionsmodell] (https://qiita.com/matsukura04583/items/0fb73183e4a7a6f06aa5) [Kapitel 4: Hauptkomponentenanalyse] (https://qiita.com/matsukura04583/items/b3b5d2d22189afc9c81c) [Kapitel 5: Algorithmus 1 (k-Nachbarschaftsmethode (kNN))] (https://qiita.com/matsukura04583/items/543719b44159322221ed) [Kapitel 6: Algorithmus 2 (k-Mittel)] (https://qiita.com/matsukura04583/items/050c98c7bb1c9e91be71) [Kapitel 7: Support Vector Machine] (https://qiita.com/matsukura04583/items/6b718642bcbf97ae2ca8)
Recommended Posts