数据预处理
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import OneHotEncoder
加载数据
data = pd.read_csv('data.csv')
提取自变量和应变量
X = data.iloc[:, :-1].values
Y = data.iloc[:, -1].values
标准化处理
scaler = StandardScaler()
X = scaler.fit_transform(X)
OneHot编码
encoder = OneHotEncoder()
Y = encoder.fit_transform(Y.reshape(-1, 1)).toarray()
划分数据集
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 keras.models import Sequential
from keras.layers import Conv1D, MaxPooling1D, Flatten, Dense
model = Sequential()
添加卷积层
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(3, 1)))
添加池化层
model.add(MaxPooling1D(pool_size=2))
添加全连接层
model.add(Flatten())
model.add(Dense(units=64, activation='relu'))
添加输出层
model.add(Dense(units=3, activation='softmax'))
编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
训练模型
model.fit(X_train.reshape(-1, 3, 1), Y_train, batch_size=32, epochs=50, verbose=1)
评估模型
score = model.evaluate(X_test.reshape(-1, 3, 1), Y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
模型优化
调整神经网络的层数、神经元个数、激活函数等超参数
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(3, 1)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(units=128, activation='relu'))
model.add(Dense(units=64, activation='relu'))
model.add(Dense(units=3, activation='softmax'))
调整优化器、学习率、批大小等训练参数
from keras.optimizers import Adam
model.compile(optimizer=Adam(lr=0.001), loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train.reshape(-1, 3, 1), Y_train, batch_size=64, epochs=100, verbose=1)
输入新的自变量,输出对应的应变量
import numpy as np
X_new = np.array([[3, 30, 5]])
X_new = scaler.transform(X_new)
Y_pred = model.predict(X_new.reshape(-1, 3, 1))
print(Y_pred)
网友评论