模型评估方法代码案例

模型评估方法代码案例

import numpy as np
import xgboost as xgb
from sklearn.ensemble import RandomForestClassifier

from sklearn.model_selection import KFold, train_test_split
from sklearn.metrics import confusion_matrix, mean_squared_error
from sklearn.datasets import load_iris


iris = load_iris()
y = iris['target']
X = iris['data']

#分为训练集和测试集
train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.2, random_state=1)
kf = KFold(n_splits=5, shuffle=True, random_state=1)

#使用xgboost在训练集上做交叉验证
xgb_model_list = []
xgb_mse_list = []
for train_index, test_index in kf.split(train_X):
    xgb_model = xgb.XGBClassifier().fit(train_X[train_index], train_y[train_index])
    xgb_model_list.append(xgb_model)
    predictions = xgb_model.predict(train_X[test_index])
    actuals = train_y[test_index]
    #print(confusion_matrix(actuals, predictions))
    mse = mean_squared_error(actuals, predictions)
    xgb_mse_list.append(mse)

print ('xgb_mse_list:{}'.format(xgb_mse_list))
print ('xgb mse均值为:{}'.format(np.mean(xgb_mse_list)))


#使用随机森林在训练集上做交叉验证
rf_model_list = []
rf_mse_list = []
for train_index, test_index in kf.split(train_X):
    rf = RandomForestClassifier(n_estimators=10, max_depth=10, random_state=10)
    rf_model_list.append(rf)
    rf.fit(train_X[train_index], train_y[train_index])
    predictions = rf.predict(train_X[test_index])
    actuals = train_y[test_index]
    mse = mean_squared_error(actuals, predictions)
    rf_mse_list.append(mse)

print ('rf_mse_list:{}'.format(rf_mse_list))
print ('rf mse均值为:{}'.format(np.mean(rf_mse_list)))


#模型评估和选择
if np.mean(rf_mse_list) <= np.mean(xgb_mse_list):
    min_mse = min(rf_mse_list)
    ind = rf_mse_list.index(mse)
    best_estimator = rf_model_list[ind]
    print('best estimator is random forest {}, mse is {}'.format(ind,min_mse))
else:
    min_mse = min(xgb_mse_list)
    ind = xgb_mse_list.index(min(xgb_mse_list))
    best_estimator = xgb_model_list[ind]
    print('best estimator is xgb {}, mse is {}'.format(ind, min_mse))


#使用最好的模型和参数预测测试集,估计模型在实际使用时的判别能力
pred = best_estimator.predict(test_X)
mse = mean_squared_error(pred, test_y)
print ('test data mse is:{}'.format(mse))
print(confusion_matrix(test_y, pred)

模型评估常用方法

留出法(hold-out):对样本数据集适当划分,产生训练集(training set)和测试集(test set),训练集用于模型训练,测试集用于测试模型对新样本的判别能力。划分时可采用分层抽样(stratified sampling)保持训练集和测试集数据中数据分布的一致性
自助法(bootstrapping):有放回的采样,有些样本会多次出现,另一些样本不出现。在样本数比较少时有效,另外,产生多个不同的训练集对集成学习有好处
交叉验证法(cross validation)防止过拟合
使用k折交叉验证能达到评估结果的稳定性

超参数和模型参数

机器学习涉及两类参数
算法的参数,也叫“超参数”,数量少,通常人工设定候选
模型的参数,数量可多达几百亿,通过学习获得
以上两种参数,都可通过模型评估方法选择ß

调参

参数调节是对算法参数的设定,参数配置好不好,对模型性能可能有显著差别
调参和算法选择一样,使用同样的模型评估方法。对每种参数配置都训练出模型,选择最好的参数作为结果
一组参数设定就是一个模型。假如有3个参数,每个参数有5个候选值,要考察125个模型

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
多元线性回归模型是一种用来描述因变量与多个自变量之间关系的统计模型。在Matlab中,我们可以使用`fitlm`函数来构建并拟合多元线性回归模型。 首先,我们需要准备好数据集。假设我们有一个包含n个样本、p个自变量和一个因变量的数据集,可以用一个n×(p+1)的矩阵X来表示自变量,其中包含p列自变量和一列常数1,用来表示截距。因变量则用一个n×1的列向量Y表示。 接下来,我们可以使用`fitlm`函数来构建多元线性回归模型。函数的语法如下: ```matlab mdl = fitlm(X, Y) ``` 其中,`X`是自变量的矩阵,`Y`是因变量的列向量,`mdl`是拟合后的多元线性回归模型对象。 我们还可以使用其他可选参数来控制拟合过程,例如指定拟合模型的形式、使用的误差分布等。 一旦模型拟合完成,我们可以使用模型对象的各种方法和属性来分析和解释结果。例如,可以使用`coefficients`属性来获取模型的回归系数,使用`predicted`方法来预测新的因变量的值。 以下是一个示例代码案例: ```matlab % 准备数据集 X = [ones(n, 1), X]; % 加一列常数1 Y = Y; % 构建多元线性回归模型 mdl = fitlm(X, Y); % 获取回归系数 coeffs = mdl.Coefficients; % 预测新的因变量值 newX = [1, x1, x2, x3]; % 假设有新的自变量值 x1, x2, x3 predictedY = predict(mdl, newX); ``` 这只是一个简单的示例,实际使用时,我们可能还需要进行数据预处理、模型评估和结果解释等。希望这个简单的示例能帮助您理解多元线性回归模型在Matlab中的实现过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值