【问题标题】:Regression problems in KerasKeras 中的回归问题
【发布时间】:2021-03-05 09:41:55
【问题描述】:

我正在应用基于 ML 的回归技术为我的实验设置开发预测模型。

我应用了各种模型:LR、决策树和随机森林。 我的 RF 模型准确率为 84%。我现在想用 Keras DL 模式提高这个分数。

谁能指导我使用 DL 和 Keras 来处理基于回归的技术。

我使用了以下模型,但准确率无法超过 70%:

model = Sequential()
model.add(Dense(20,input_dim=5, activation='relu'))

#second hidden layer
model.add(Dense(20, activation='relu'))

#output layer
model.add(Dense(1, activation='linear'))

#compile ANN
model.compile(optimizer="Adam", loss='mean_squared_error', metrics=['accuracy'])

如何将深度学习应用于回归技术。

【问题讨论】:

  • 您提供的数据洞察力太少,它看起来如何?关于超参数、损失函数以及架构的决定取决于您想要实现的目标以及数据的外观。这里的每个人都需要更多信息来帮助您。此外,还有一个概念错误。准确度指标用于分类任务,但不用于回归任务。
  • 基本上这是一个实验,我有 5 个不同的参数,系统提供信号输出。我正在尝试用 ML 和 DL 对系统输出进行建模。但是我使用 randomForests 达到了 ML 的极限。正如你所建议的,我将指标更改为 mae 和 mse,但 R2 分数仍然在 60% 左右。有什么建议可以进一步改进吗?
  • 你必须知道 DL 的性能并不总是优于 ML,有时简单的 SVM 或 RandomForest 可能比 ANN 做得更好,我建议你使用网格搜索并尝试为您拥有的 RandomForest 模型或尝试其他机器学习技术,而不是切换到深度学习。
  • 谢谢@MahmoudYoussef。是的,许多文章中都提到过 ML 有时可能比 DL 表现更好。看起来情况就是这样。我使用了 GridSearch CV,我得到的最大准确率为 84%。我只是想探索深度学习方法

标签: python tensorflow keras


【解决方案1】:

这里是回归和分类,使用 Keras 和 TF。该数据集可从本文末尾的链接获得。

import pandas as pd
import numpy as np
import tensorflow as tf

import matplotlib.pyplot as plt
# %matplotlib inline

import seaborn as sns
sns.set(style="darkgrid")


# Classification with TensorFlow 2.0
cols = ['price', 'maint', 'doors', 'persons', 'lug_capacity', 'safety','output']
cars = pd.read_csv(r'C:/your_path/car_evaluation.csv', names=cols, header=None)

cars.head()

plot_size = plt.rcParams["figure.figsize"]
plot_size [0] = 8
plot_size [1] = 6
plt.rcParams["figure.figsize"] = plot_size


cars.output.value_counts().plot(kind='pie', autopct='%0.05f%%', colors=['lightblue', 'lightgreen', 'orange', 'pink'], explode=(0.05, 0.05, 0.05,0.05))


price = pd.get_dummies(cars.price, prefix='price')
maint = pd.get_dummies(cars.maint, prefix='maint')

doors = pd.get_dummies(cars.doors, prefix='doors')
persons = pd.get_dummies(cars.persons, prefix='persons')

lug_capacity = pd.get_dummies(cars.lug_capacity, prefix='lug_capacity')
safety = pd.get_dummies(cars.safety, prefix='safety')

labels = pd.get_dummies(cars.output, prefix='condition')

X = pd.concat([price, maint, doors, persons, lug_capacity, safety] , axis=1)


labels.head()

y = labels.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.20, random_state=42)

#Model Training
from tensorflow.keras.layers import Input, Dense, Activation,Dropout
from tensorflow.keras.models import Model


input_layer = Input(shape=(X.shape[1],))
dense_layer_1 = Dense(15, activation='relu')(input_layer)
dense_layer_2 = Dense(10, activation='relu')(dense_layer_1)
output = Dense(y.shape[1], activation='softmax')(dense_layer_2)

model = Model(inputs=input_layer, outputs=output)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])


print(model.summary())


history = model.fit(X_train, y_train, batch_size=8, epochs=50, verbose=1, validation_split=0.2)


score = model.evaluate(X_test, y_test, verbose=1)

print("Test Score:", score[0])
print("Test Accuracy:", score[1])


# Regression with TensorFlow 2.0

petrol_cons = pd.read_csv(r'C:/your_path/petrol_consumption.csv')

petrol_cons.head()

X = petrol_cons.iloc[:, 0:4].values
y = petrol_cons.iloc[:, 4].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.preprocessing import StandardScaler

sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)


input_layer = Input(shape=(X.shape[1],))
dense_layer_1 = Dense(100, activation='relu')(input_layer)
dense_layer_2 = Dense(50, activation='relu')(dense_layer_1)
dense_layer_3 = Dense(25, activation='relu')(dense_layer_2)
output = Dense(1)(dense_layer_3)

model = Model(inputs=input_layer, outputs=output)
model.compile(loss="mean_squared_error" , optimizer="adam", metrics=["mean_squared_error"])


history = model.fit(X_train, y_train, batch_size=2, epochs=100, verbose=1, validation_split=0.2)


from sklearn.metrics import mean_squared_error
from math import sqrt

pred_train = model.predict(X_train)
print(np.sqrt(mean_squared_error(y_train,pred_train)))

pred = model.predict(X_test)
print(np.sqrt(mean_squared_error(y_test,pred)))

# path to dataset
# https://www.kaggle.com/elikplim/car-evaluation-data-set

【讨论】:

    猜你喜欢
    • 2021-01-02
    • 2021-07-03
    • 2017-09-05
    • 2019-03-14
    • 1970-01-01
    • 2019-09-15
    • 2019-03-04
    • 2011-08-09
    相关资源
    最近更新 更多