數據準備
導入數據
from sklearn import datasets
iris = datasets.load_iris()
type(iris)
iris.data#四個自變量
iris.target#目標變量
對變量進行標準化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
irisZX = StandardScaler().fit_transform(iris.data)
使用sklearn擬合
#MLPClassifier默認爲shuffle=True 因此不需要事先打亂數據的順序
from sklearn.neural_network import MLPClassifier
clf = MLPClassifier(activation = 'logistic',hidden_layer_sizes = (5),
solver = 'lbfgs',random_state = 1)
clf.fit(irisZX,iris.target)
clf.score(irisZX,iris.target)
擬合的score分數爲0.9933
keras方法
數據轉換
keras需要將因變量轉換爲啞變量
#將因變量轉換爲啞變量
from keras.utils import to_categorical
y = to_categorical(iris.target)
y[:5]
模型準備
直接上代碼,先導入需要的包,然後建立模型,這裏是順序模型然後用add添加層的方法。第一層輸入的尺寸爲4(包含四個自變量),輸出層爲5,激活函數爲sigmoid。第二層也就是輸出層,每個樣本需要輸出三個值,激活函數爲softmax,保證輸出結果的取值在[0,1]之間。
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
model.add(Dense(5,input_dim = 4,activation = 'sigmoid'))
model.add(Dense(3,activation = 'softmax'))#softmax保證輸出結果爲[0,1]
model.compile(loss = 'categorical_crossentropy',
optimizer = 'rmsprop',
metrics = ['accuracy'])
可以看一下模型描述
模型擬合及預測
下面直接添加fit擬合模型,可根據需要是否顯示日誌
model.fit(irisZX,y,epochs = 50)
model.fit(irisZX,y,epochs = 50,verbose = 0)
model.fit(irisZX,y,epochs = 50,verbose = 2)
看一下模型效果:結果【測試集損失函數,預測準確率】
模型預測:直接用predict函數
模型結構的可視化
history將模型的accuracy和loss存貯起來
hist = model.fit(irisZX,y,epochs = 50)
hist.history
plt.plot(hist.history['accuracy'])
plt.plot(hist.history['loss'])
#畫一起
plt.plot(hist.history['accuracy'])
ax2 = plt.gca().twinx()#使用第二Y軸
plt.plot(hist.history['loss'])
及時終止訓練
當達到一定的要求時,可以讓模型及時終止訓練。使用EarlyStopping 函數
from keras.callbacks import EarlyStopping
stop = EarlyStopping(monitor = 'val_loss',min_delta = 0.1)
model.fit(irisZX,y,epochs = 500,
validation_data = (irisZX,y),
callbacks = [stop])