【Python机器学习系列】机器学习模型微调---随机搜索(案例)

liftword2个月前 (02-05)技术文章17

这是我的第245篇原创文章。

一、引言

如果探索的组合数量较少时,网格搜索是一种不错的方法,但当超参数的搜索范围较大时,通常会优先选择使用 RandomizedSearchCV 。它与 GridSearchCV 用法相似,但它不会尝试所有可能的组合,而是在每次迭代中为每个超参数选择一个随机值,然后对一定数量的随机组合进行评估,这种方法有两个显著的好处。

如果运行随机 1000 个迭代,那么将会探索每个超参数的 1000 个不同的值(而不像网格搜索方法那样每个超参数仅探索少量几个值)。通过简单地设置迭代次数,可以更好地控制要分配给超参数搜索的计算预算。

二、实现过程

数据准备与划分

# 准备数据
data = pd.read_csv(r'Dataset.csv')
df = pd.DataFrame(data)
# 提取目标变量和特征变量
target = 'target'
features = df.columns.drop(target)
print(data["target"].value_counts()) # 顺便查看一下样本是否平衡
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df[features], df[target], test_size=0.2, random_state=0)

2.1 随机搜索参数建模

# 模型的构建与训练
param_distribs = {
    # 均匀离散随机变量
    'n_estimators': randint(low=1, high=200),
    'max_features': randint(low=7, high=9),
}


model = RandomForestClassifier(random_state=42)
rnd_search = RandomizedSearchCV(model, param_distributions=param_distribs,
                                n_iter=10, cv=5, scoring='neg_mean_squared_error', random_state=42)
rnd_search.fit(X_train, y_train)

2.2查看评分最高的超参数组合

print(grid_search.best_params_)

2.3查看当前的最佳估算器

输出只显示非默认的参数

final_model = grid_search.best_estimator_
print(final_model)

2.4计算的各种超参数组合的评分

cvres = grid_search.cv_results_
for mean_score, params in zip(cvres["mean_test_score"], cvres["params"]):
    print(np.sqrt(-mean_score), params)

模型推理与评价

# 模型推理与评价
y_pred = final_model.predict(X_test)
y_scores = final_model.predict_proba(X_test)
acc = accuracy_score(y_test, y_pred) # 准确率acc
cm = confusion_matrix(y_test, y_pred) # 混淆矩阵
cr = classification_report(y_test, y_pred) # 分类报告
fpr, tpr, thresholds = roc_curve(y_test, y_scores[:, 1], pos_label=1) # 计算ROC曲线和AUC值,绘制ROC曲线
roc_auc = auc(fpr, tpr)
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

作者简介:

读研期间发表6篇SCI数据算法相关论文,目前在某研究院从事数据算法相关研究工作,结合自身科研实践经历持续分享关于Python、数据分析、特征工程、机器学习、深度学习、人工智能系列基础知识与案例。关注gzh:数据杂坛,获取数据和源码学习更多内容。

原文链接:

【Python机器学习系列】机器学习中的模型微调---随机搜索(案例+源码)

相关文章

Python 随机字符串_python 生成随机字符

在很多时候我们可能需要生成一些随机字符串。Python 也为我们提供了生成随机字符串的方法和函数。这个函数是在 random 库中定义的函数 choice。通常 choice 将会从给定的字符串中挑选...

python中随机模块random的用法_pythonrandom随机数的用法

Python 有一个可用于制作随机数的内建模块。现在总结归纳一下,方便大家查询学习random 模块有一组如下的方法:序号方法描述1seed()初始化随机数生成器。2getstate()返回随机数生成...

Python随机抽查部分学生,手把手教你学会random

疫情期间的网课上你有被熊孩子气到炸吗网线的两端,是不是这样巧合呢复课后的课堂上你有被熊孩子气到疯吗等下,跑题了,下面言归正传关键知识点:random库、判断、循环、列表、异常处理、文件的读取等。开发环...

Python实现随机&批量梯度下降算法

一.概述梯度下降属于迭代法的一种,可以用于求解最小二乘问题。在求解机器学习算法的模型参数时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函...

玩转 Python 中的随机数_python编程随机数

开发中我们经常遇到需要随机数的场景,比如为了用户密码更安全我们有时会加盐,也就是将用户原密码连接上一串随机字符然后加密保存,又比如我们可能需要随机展示某张图片等等。今天,我们就来理一理 Python...

零基础学python第七天之随机整数randint

我们的目标是:用最短的时间从编程零基础提升到掌握python常用的基本知识。加油!昨天我们的猜数字小游戏实现了多次运行,直到猜中为止,这个小游戏还有一个小不足,就是预设数是固定的,对我们来说,没有什么...