IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> KerasClassifier与KerasRegressior简单使用(利用iris数据集与Boston数据集) -> 正文阅读

[人工智能]KerasClassifier与KerasRegressior简单使用(利用iris数据集与Boston数据集)

以下代码使用KerasClassifier构建简单神经网络,对iris多分类问题进行训练,最后加入10折交叉验证,对模型准确率和方差进行计算。

from sklearn import datasets
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold

# 导入数据
dataset = datasets.load_iris()

x = dataset.data
Y = dataset.target

# 设定随机种子
seed = 7
np.random.seed(seed)

# 构建模型函数
def create_model(optimizer='adam', init='glorot_uniform'):
    # 构建模型
    model = Sequential()
    model.add(Dense(units=4, activation='relu', input_dim=4, kernel_initializer=init))
    model.add(Dense(units=6, activation='relu', kernel_initializer=init))
    model.add(Dense(units=3, activation='softmax', kernel_initializer=init))

    # 编译模型
    model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])

    return model

model = KerasClassifier(build_fn=create_model, epochs=200, batch_size=5, verbose=0)
kfold = KFold(n_splits=10, shuffle=True, random_state=seed)
results = cross_val_score(model, x, Y, cv=kfold)
print('Accuracy: %.2f%% (%.2f)' % (results.mean()*100, results.std()))

?接下来,利用Boston数据集进行KerasRegressior使用

from sklearn import datasets
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold

# 导入数据
dataset = datasets.load_boston()

x = dataset.data
Y = dataset.target

# 设定随机种子
seed = 7
np.random.seed(seed)

构建模型函数,需要注意,回归问题不需要分类,此处的输出层不需要激活函数,直接返回结果

# 构建模型函数
def creat_model(units_list=[13],optimizer='adam',init='normal'):
    # 构建模型
    model = Sequential()
    
    # 构建第一个隐藏层和输入层
    units = units_list[0]
    model.add(Dense(units=units,activation = 'relu',input_dim=13,kernel_initializer = init))
    # 构建更多隐藏层
    for units in units_list[1]:
        model.add(Dense(units=units,activation='relu', kernel_initializer = init))
        
    # 构建输出层,由于回归问题不需要对预测结果进行分类,因此不需要激活函数
    model.add(Dense(units=1,kernel_initializer = init))
    
    # 编译函数,指定用于评估一组权重的损失函数loss(回归问题一般用均方误差MSE)、用于搜索网络不同权重的优化器optimizer
    model.compile(loss='mean_squared_error',optimizer = optimizer)
    
    return model 

KerasRegreesor调用模型函数,并设置对应的迭代次数和每次更新权重的每一批次的实例个数。最后运用k折交叉验证看结果

model = KerasRegressor(build_fn = creat_model, epochs = 200, batch_size = 5, verbose = 0)

# 设置算法评估基准
kfold = KFold(n_splits = 10, shuffle = True, random_state = seed)
results = cross_val_score(model, x, Y, cv = kfold)
print('Baseline: %.2f (%.2f) MSE' % (results.mean(), results.std()))

接下来对以上模型进行优化。

第一,上述Boston的输入数据尺度不同,即各指标间数据差值较大,可能会导致模型偏差,因此需要事先对输入数据,即x进行标准化处理。此处在模型评估过程中使用scikit-learn的pipeline框架,首先对数据集标准化,之后创建和评估基线神经网络。使用pieline框架可以在交叉验证的每一个折中执行数据标准化处理。

# 数据标准化,改进算法
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline

steps=[]
steps.append(('standardized',StandardScaler()))
steps.append(('mlp',model))
pipeline = Pipeline(steps)
kfold = KFold(n_splits=10, shuffle=True, random_state=seed)
results = cross_val_score(pipeline, x, Y, cv=kfold)
print('StandardScaler: %.2f (%.2f) MSE' % (results.mean(), results.std()))

第二、可对基准神经网络进行优化,即使用网络搜索方法,找到最优超参数。

#利用网络搜索的方式优化模型
from sklearn.model_selection import GridSearchCV

# 调参选择最优参数
param_grid={}
param_grid['units_list']=[[20],[13,2],[13,6]]  # 其中第一个参数表示第一隐藏层包含的神经元个数,第二个参数表示隐藏层个数
param_grid['optimizer'] = ['rmsprop','adam']
param_grid['init'] = ['glorot_uniform','normal']
param_grid['epochs'] = [100,200]
param_grid['batch_size'] = [5,20]

#调参
scaler = StandardScaler()
scaler_x = scaler.fit_transform(x)
grid = GridSearchCV(estimator = model, param_grid = param_grid)
results = grid.fit(scaler_x,Y)

for mean, std, param in zip(means,stds,params):
    print('%f (%f) with: %r'% (mean, std, param))

该文代码源自魏贞原《深度学习:基于Keras的Python实践》

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 22:08:21  更:2022-03-17 22:10:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 14:51:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码