机器学习之模型选择

第一部分:什么是模型选择

(1)选择不同的模型

比如选knn,决策树等等

(2)选择相同的模型,设置不同的参数

比如说都选择神经网络,但是里面的激活函数可能就不一样。

第二部分:模型选择的原则

(1)模型效果

(2)运算速度

(3)算力要求

(4)可解释性

第三部分:代码实现

我们以knn,决策树,和多项式逻辑回归模型为例,同时使用k均值交叉认证的方法:

(1)导包

#第一部分:导包
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
# 忽略 ConvergenceWarning
import warnings
warnings.filterwarnings("ignore")

(2)定义knn,决策树,和多项式逻辑回归模型函数

#第二部分:定义计算knn,决策树和多项式逻辑回归的score函数
def model_selection(x, y, cv):#xy是样本,cv是k折交叉验证中的k
    knn = KNeighborsClassifier(n_neighbors=3)
    dt = DecisionTreeClassifier(max_depth=5)
    lr = Pipeline([
        ('poly', PolynomialFeatures(degree=2)),
        ('log_reg', LogisticRegression())
    ])

    print('knn_score:%f, dt_score:%f, lr_score:%f' % (
        np.mean(cross_val_score(knn, x, y, cv=5)),
        np.mean(cross_val_score(lr, x, y, cv=5)),
        np.mean(cross_val_score(dt, x, y, cv=5))
    ))

(3)导入数据集

#第三部分:导入数据集
dataset=datasets.load_digits()

(4)输出knn,决策树,和多项式逻辑回归模型效果

#第四部分:调用模型输出结果
x=dataset.data
y=dataset.target
cv=5
model_selection(x,y,cv)

发现这里面的knn和决策树效果比较好。

(5)定义并使用基础神经网络模型

#第五步:简单神经网络模型
from sklearn.neural_network import MLPClassifier

nn = MLPClassifier(
    hidden_layer_sizes=(1,),
    activation='identity',
    learning_rate_init=0.01,
    random_state=233
)
print(np.mean(cross_val_score(nn, x, y, cv=5)))

发现效果更不好,因为上面的那个神经网络模型太简单了。

(6)神经网络的模型选择

①隐藏层的数量②激活函数③反向传播的优化算法

#第五步:简单神经网络模型
from sklearn.neural_network import MLPClassifier

nn = MLPClassifier(
    hidden_layer_sizes=(100, 50, 100),#第一层有 100 个神经元,第二层有 50 个神经元,第三层有 100 个神经元。
    activation='relu',
    learning_rate_init=0.01,
    random_state=233,
    solver='adam'#使用adam优化器
)
print(np.mean(cross_val_score(nn, x, y, cv=5)))

可以看到提升效果巨大!

(7)以上完整pycharm代码

#第一部分:导包
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
# 忽略 ConvergenceWarning
import warnings
warnings.filterwarnings("ignore")

#第二部分:定义计算knn,决策树和多项式逻辑回归的score函数
def model_selection(x, y, cv):#xy是样本,cv是k折交叉验证中的k
    knn = KNeighborsClassifier(n_neighbors=3)
    dt = DecisionTreeClassifier(max_depth=5)
    lr = Pipeline([
        ('poly', PolynomialFeatures(degree=2)),
        ('log_reg', LogisticRegression())
    ])

    print('knn_score:%f, dt_score:%f, lr_score:%f' % (
        np.mean(cross_val_score(knn, x, y, cv=5)),
        np.mean(cross_val_score(lr, x, y, cv=5)),
        np.mean(cross_val_score(dt, x, y, cv=5))
    ))
#第三部分:导入数据集
dataset=datasets.load_digits()
#第四部分:调用模型输出结果
x=dataset.data
y=dataset.target
cv=5
model_selection(x,y,cv)
#第五步:简单神经网络模型
from sklearn.neural_network import MLPClassifier

nn = MLPClassifier(
    hidden_layer_sizes=(100, 50, 100),#第一层有 100 个神经元,第二层有 50 个神经元,第三层有 100 个神经元。
    activation='relu',
    learning_rate_init=0.01,
    random_state=233,
    solver='adam'#使用adam优化器
)
print(np.mean(cross_val_score(nn, x, y, cv=5)))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还不秃顶的计科生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值