keras:
keras是乙個高層神經網路api,keras由純python編寫而成並基tensorflow、theano以及cntk後端。keras為支援快速實驗而生.
keras的核心資料結構是「模型」,模型是一種組織網路層的方式。keras中主要的模型是sequential模型,sequential是一系列網路層按順序構成的棧。
下面我就用兩個經典資料集iris 和 mnist 來解釋keras是如何完成邏輯分類的
iris:
# coding=utf-8
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from sklearn.cross_validation import train_test_split
from sklearn.linear_model import logisticregressioncv
from keras.models import sequential
from keras.layers.core import dense, activation
from keras.utils import np_utils
這裡用到sklearn的兩種切分資料集的方法:
from sklearn.model_selection import shufflesplit
rs = shufflesplit(n_splits=1, train_size=0.6, test_size=0.4, random_state=1)
#n_splits表示只需要乙個樣本結果,現在訓練-驗證集比例為: 6:4, random_state為洗牌次數
rs.get_n_splits(x)
x_trainset = none
x_testset = none
y_trainset = none
y_testset = none
for train_index, test_index in rs.split(x, y):
x_trainset, x_testset = x[train_index], x[test_index]
y_trainset, y_testset = y[train_index], y[test_index]
2
from sklearn.cross_validation import train_test_split
train_x, test_x, train_y, test_y = train_test_split(x, y, train_size=0.1, random_state=0)
#隨機切分
所有的y都轉化為one-hot函式:
def one_hot_encode_object_array(arr):
uniques, ids = np.unique(arr, return_inverse=true)
return np_utils.to_categorical(ids, len(uniques))
iris = sns.load_dataset("iris")
# 匯入資料集iris
x = iris.values[:, :4]
y = iris.values[:, 4]
#劃分資料集
train_x, test_x, train_y, test_y = train_test_split(x, y, train_size=0.6, random_state=0)
print train_x
train_y_ohe = one_hot_encode_object_array(train_y)
test_y_ohe = one_hot_encode_object_array(test_y)
模型:
#定義模型
model = sequential()
# 輸入層大小,隱含層大小,啟用函式
model.add(dense(200,input_shape=(4,)))
model.add(activation('relu'))
#輸出層大小,啟用函式,兩層網路
model.add(dense(3))
model.add(activation('softmax'))
#編譯模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=["accuracy"])
#訓練模型
model.fit(train_x, train_y_ohe, nb_epoch=100, batch_size=1, verbose=1)
#評估模型成績
# predict_y = model.predict_proba(test_x)
# print predict_y
loss, accuracy = model.evaluate(test_x,test_y_ohe,verbose=0)
print ("accuracy = ".format(accuracy))
mnist:
import numpy as np
import keras
np.random.seed(1337)
#隨機種子
from keras.datasets import mnist
from keras.models import sequential
from keras.layers import dense
from keras.utils import np_utils
batch_size = 128
nb_classes = 10
#類別,數字0-9
np_epoch = 10
#梯度下降迴圈訓練次數
img_size = 28*28
#輸入大小
(x_train,y_train),(x_test,y_test) = mnist.load_data()
#載入資料集,已經劃分好,shuffle-split
x_train = x_train.reshape(y_train.shape[0],img_size).astype("float32")/255
x_test = x_test.reshape(y_test.shape[0],img_size).astype("float32")/255
#生成向量,顏色1-255
print x_train.shape
print x_test.shape
#老規矩,把y變為one-hot編碼
y_train = np_utils.to_categorical(y_train,nb_classes)
y_test = np_utils.to_categorical(y_test,nb_classes)
model = sequential([dense(10,input_shape=(img_size,),activation="softmax"),])
#優化模型,隨機梯度下降(rmsprop),loss_funtion(交叉熵)
model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])
model.fit(x_train,y_train,batch_size=batch_size,nb_epoch=1,verbose=1,validation_data=(x_test,y_test))
評估模型成績:
score = model.evaluate(x_test,y_test,verbose=0)
print ('accuracy:{}'.format(score[1]))
my github: 入門簡單資料探勘步驟
由於自己是資料分析與大資料技術專業的,並且最近剛入門資料探勘與機器學習,如有不當之處希望各位讀者指正。在本文開始之前先引入幾個概念。資料集 是資料的集合,所謂的集合表現就是一張資料庫 例如excel表 乙個資料庫 例如會員庫 乙個資料檔案 例如.csv檔案 等,iris.csv就是乙個資料集,裡面包...
keras筆記 mnist資料集上的簡單訓練
學習了keras已經好幾天了,之前一直拒絕使用keras,但是現在感覺keras是真的好用啊,可以去嘗試一下啊。首先展示的第乙個 還是mnist資料集的訓練和測試,以下是 from keras.models import sequential from keras.layers.core impor...
MySQL入門之簡單資料查詢
include include include include include int main con mysql real connect mysql,localhost root 123456 mydb2 0,null,0 if con null else 執行sql查詢 mysql quer...