我正在研究 XAI 模型并根据我的数据实现一个简单的模型。训练时,损失和准确性是难的,我无法找出问题所在。
[XAI] https://github.com/EthicalML/xai/blob/master/examples/XAI%20Tabular%20Data%20Example%20Usage.ipynb
以下是我的数据,请不要包含使用列,因为这些是预测列。
import xai.data
import pandas as pd
df = pd.read_csv('/content/heat_pipe.csv')
categorical_cols = ["Date", "Temperature(degree)", "Wind_speed(m/s)","Humidity(%)","day_of_the_week", "sarturday", "sunday", "public_holidays_(weekdays)","total_holidays"]
_ = xai.correlations(df, include_categorical=True, plot_type="matrix")
_ = xai.correlations(df, include_categorical=True)
proc_df = xai.normalize_numeric(df)
proc_df = xai.convert_categories(proc_df)
x = proc_df.drop("usage_(total)", axis=1)
y = proc_df["usage_(total)"]
x_train, y_train, x_test, y_test, train_idx, test_idx = \
xai.balanced_train_test_split(
x, y, "Date", "Temperature(degree)", "Wind_speed(m/s)","Humidity(%)", "day_of_the_week", "sarturday", "sunday", "public_holidays_(weekdays)","total_holidays",
min_per_group=300,
max_per_group=300,
categorical_cols=categorical_cols)
x_train_display = df[train_idx]
x_train_display
x_test_display = df[test_idx]
print("Total number of examples: ", x_test.shape[0])
df_test = x_test_display.copy()
df_test["usage_(total)"] = y_test
型号代码
import sklearn
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, mean_squared_error, roc_curve, auc
from tensorflow.keras.layers import Input, Dense, Flatten,Concatenate, concatenate, Dropout, Lambda, Embedding
from tensorflow.keras.models import Model, Sequential
def build_model(X):
input_els = []
encoded_els = []
dtypes = list(zip(X.dtypes.index, map(str, X.dtypes)))
for k,dtype in dtypes:
input_els.append(Input(shape=(1,)))
if dtype == "int8":
e = Flatten()(Embedding(X[k].max()+1, 1)(input_els[-1]))
else:
e = input_els[-1]
encoded_els.append(e)
encoded_els = concatenate(encoded_els)
layer1 = Dropout(0.5)(Dense(100, activation="relu")(encoded_els))
out = Dense(1, activation='sigmoid')(layer1)
# train model
model = Model(inputs=input_els, outputs=[out])
model.compile(optimizer="adam", loss='categorical_crossentropy', metrics=['accuracy'])
return model
def f_in(X, m=None):
"""Preprocess input so it can be provided to a function"""
if m:
return [X.iloc[:m,i] for i in range(X.shape[1])]
else:
return [X.iloc[:,i] for i in range(X.shape[1])]
def f_out(probs, threshold=0.5):
"""Convert probabilities into classes"""
return list((probs >= threshold).astype(int).T[0])
model = build_model(x_train)
model.fit(f_in(x_train), y_train, epochs=50, batch_size=512)
错误
Epoch 1/50
1/1 [==============================] - 1s 713ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 2/50
1/1 [==============================] - 0s 12ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 3/50
1/1 [==============================] - 0s 15ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 4/50
1/1 [==============================] - 0s 15ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 5/50
1/1 [==============================] - 0s 15ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 6/50
1/1 [==============================] - 0s 12ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 7/50
1/1 [==============================] - 0s 15ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 8/50
1/1 [==============================] - 0s 12ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 9/50
1/1 [==============================] - 0s 13ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 10/50
1/1 [==============================] - 0s 15ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 11/50
1/1 [==============================] - 0s 13ms/step - loss: nan - accuracy: 0.0000e+00