怎样做展示型网站微信小程序开发成本
web/
2025/9/29 9:44:54/
文章来源:
怎样做展示型网站,微信小程序开发成本,wordpress最大负载,xx集团门户网站建设策划方案作者前言: 通过向身边的同事大佬请教之后#xff0c;大佬指点我把本文的宗旨从“参数调优”改成了“参数调整”。实在惭愧#xff0c;暂时还没到能“调优”的水平#xff0c;本文只能通过实操演示“哪些操作会对数据训练产生影响”#xff0c;后续加深学习之后#xff0c;… 作者前言: 通过向身边的同事大佬请教之后大佬指点我把本文的宗旨从“参数调优”改成了“参数调整”。实在惭愧暂时还没到能“调优”的水平本文只能通过实操演示“哪些操作会对数据训练产生影响”后续加深学习之后再争取入门“参数调优”。 一、为什么要参数调优
答提升数据模型性能。
通常来说我们选择使用的数据模型并不是万能的它们面对不同的使用场景时均存在一定的局限性因此我们渴望提升模型性能理论上无限追求“万能”模型。
数据模型的常用性能指标大致如下
性能指标定义衡量指标影响因素准确性⭐⭐⭐模型在预测或分类任务中的准确性即模型对数据的预测或分类是否准确。- 准确率Accuracy- 精确率Precision- 召回率Recall- F1分数F1 Score- AUC-ROC- 数据集的质量和数量- 特征工程的效果- 模型的选择和参数调优泛化能力⭐⭐⭐模型对未见过的新数据、噪声和异常值的适应能力即模型在新数据上的表现是否良好。- 交叉验证Cross-Validation- 验证集和测试集性能- 学习曲线Learning Curve- 异常值检测能力- 鲁棒性测试- 数据集的多样性和代表性- 模型的复杂度过拟合和欠拟合- 正则化技术如L1、L2正则化- 数据增强和数据预处理方法训练速度模型在训练过程中的速度即模型在给定数据集上的训练时间。- 训练时间- 迭代次数- 数据集的大小和复杂度- 模型的复杂度和参数数量- 硬件配置如CPU、GPU、TPU- 优化算法如SGD、Adam的选择预测速度模型在预测或推断阶段的速度即模型在给定数据上的预测时间。- 预测时间- 吞吐量- 模型的复杂度和参数数量- 硬件配置如CPU、GPU、TPU- 预测时的批处理大小Batch Size模型复杂度模型的复杂度和简洁性即模型的结构和参数数量以及模型是否过于简单或过于复杂。- 参数数量- 模型结构- 计算复杂度- 任务的复杂性和数据的特征- 模型选择如线性模型、决策树、神经网络- 正则化和剪枝技术
二、参数调优调整
切记切记下面所有的例子都是仅针对单一衡量指标演示不同的case对该指标的影响具体的衡量指标数据并非越大/小越好评判性能好坏需要根据实际情况结合多个衡量指标共同判断
通过阅读一文入门机器学习我们知道数据模型训练的流程大致如下 #mermaid-svg-91QGHu0i0LmoWHbp {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-91QGHu0i0LmoWHbp .error-icon{fill:#552222;}#mermaid-svg-91QGHu0i0LmoWHbp .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-91QGHu0i0LmoWHbp .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-91QGHu0i0LmoWHbp .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-91QGHu0i0LmoWHbp .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-91QGHu0i0LmoWHbp .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-91QGHu0i0LmoWHbp .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-91QGHu0i0LmoWHbp .marker{fill:#333333;stroke:#333333;}#mermaid-svg-91QGHu0i0LmoWHbp .marker.cross{stroke:#333333;}#mermaid-svg-91QGHu0i0LmoWHbp svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-91QGHu0i0LmoWHbp .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-91QGHu0i0LmoWHbp .cluster-label text{fill:#333;}#mermaid-svg-91QGHu0i0LmoWHbp .cluster-label span{color:#333;}#mermaid-svg-91QGHu0i0LmoWHbp .label text,#mermaid-svg-91QGHu0i0LmoWHbp span{fill:#333;color:#333;}#mermaid-svg-91QGHu0i0LmoWHbp .node rect,#mermaid-svg-91QGHu0i0LmoWHbp .node circle,#mermaid-svg-91QGHu0i0LmoWHbp .node ellipse,#mermaid-svg-91QGHu0i0LmoWHbp .node polygon,#mermaid-svg-91QGHu0i0LmoWHbp .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-91QGHu0i0LmoWHbp .node .label{text-align:center;}#mermaid-svg-91QGHu0i0LmoWHbp .node.clickable{cursor:pointer;}#mermaid-svg-91QGHu0i0LmoWHbp .arrowheadPath{fill:#333333;}#mermaid-svg-91QGHu0i0LmoWHbp .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-91QGHu0i0LmoWHbp .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-91QGHu0i0LmoWHbp .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-91QGHu0i0LmoWHbp .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-91QGHu0i0LmoWHbp .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-91QGHu0i0LmoWHbp .cluster text{fill:#333;}#mermaid-svg-91QGHu0i0LmoWHbp .cluster span{color:#333;}#mermaid-svg-91QGHu0i0LmoWHbp div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-91QGHu0i0LmoWHbp :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 导入 训练 数据集 特征工程 数据模型 因此参数调优基本可以分为两个方向
数据集 数据量数据特征 数据模型 模型类型模型超参数
所以下面内容均按照这两个方向来演示。 Tips 在开始之前请先准备好环境 # 安装python3
# 自行搜索安装教程我这里使用的是python3# 安装pip3
python3 -m ensurepip --upgrade# 安装机器学习常用库
pip3 install scikit-learn
pip3 install numpy0.准确性
以经典的鸢尾花数据集为例演示“数据集、数据模型的调整”对准确性的影响。
这里仅演示准确率这一个衡量指标需要注意并非准确率越高准确性就越强如过拟合。
a.影响因素数据集
在例子中我们分3种case测试
case1相同数据模型相同数据集使用所有特征使用100%数据量case2相同数据模型相同数据集使用所有特征仅使用5%数据量case3相同数据模型相同数据集仅使用前2个特征使用100%数据量
示例代码如下
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score# 加载鸢尾花数据集
iris load_iris()
X iris.data
y iris.target# 分割数据集为训练集和测试集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.3, random_state42)# case1相同数据模型相同数据集使用所有特征使用100%数据量
# 逻辑回归模型
model1 LogisticRegression()
model1.fit(X_train, y_train)
y_pred1 model1.predict(X_test)
# 计算分类模型准确率
accuracy1 accuracy_score(y_test, y_pred1)# case2相同数据模型相同数据集使用所有特征仅使用5%数据量
# 逻辑回归模型
model2 LogisticRegression()
X_train_5 X_train[:int(0.05 * len(X_train))]
y_train_5 y_train[:int(0.05 * len(y_train))]
model2.fit(X_train_5, y_train_5)
y_pred2 model2.predict(X_test)
# 计算分类模型准确率
accuracy2 accuracy_score(y_test, y_pred2)# case3相同数据模型相同数据集仅使用前2个特征使用100%数据量
# 逻辑回归模型
model3 LogisticRegression()
X_train_subset X_train[:, :2]
X_test_subset X_test[:, :2]
model3.fit(X_train_subset, y_train)
y_pred3 model3.predict(X_test_subset)
# 计算分类模型准确率
accuracy3 accuracy_score(y_test, y_pred3)print(f使用100%训练数据的准确率: {accuracy1:.2f})
print(f使用5%训练数据的准确率: {accuracy2:.2f})
print(f仅使用前2个特征的准确率: {accuracy3:.2f})执行结果
case准确率case1相同数据模型相同数据集使用所有特征使用100%数据量1.00case2相同数据模型相同数据集使用所有特征仅使用5%数据量0.44case3相同数据模型相同数据集仅使用前2个特征使用100%数据量0.82
很明显可以看出相同数据集不同的数据量、数据特征均会影响准确率。
b.影响因素数据模型
在例子中我们分3种case测试
case1使用逻辑回归模型相同数据集仅使用前2个特征使用100%数据量case2使用随机森林模型相同数据集仅使用前2个特征使用100%数据量case3使用随机森林模型相同数据集仅使用前2个特征使用100%数据量进行超参数调优 Tips 这里“仅使用前2个特征”是因为鸢尾花数据集这个经典的机器学习案例相对较简单数据量小、特征少、标签有限如果使用全部特征来训练的话准确率直接100%了不便于演示调整效果因此这里限制一下特征。 示例代码如下
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score# 加载鸢尾花数据集
iris load_iris()
X iris.data
y iris.target# 分割数据集为训练集和测试集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.3, random_state42)# 仅使用前2个特征
X_train_subset X_train[:, :2]
X_test_subset X_test[:, :2]# case1逻辑回归
clf_lr LogisticRegression(random_state42, max_iter200)
clf_lr.fit(X_train_subset, y_train)
y_pred_lr clf_lr.predict(X_test_subset)
# 计算分类模型准确率
accuracy_lr accuracy_score(y_test, y_pred_lr)# case2随机森林
clf_rf RandomForestClassifier(random_state42)
clf_rf.fit(X_train_subset, y_train)
y_pred_rf clf_rf.predict(X_test_subset)
# 计算分类模型准确率
accuracy_rf accuracy_score(y_test, y_pred_rf)# case3随机森林超参数调优
param_grid {n_estimators: [50, 100, 200],max_depth: [None, 10, 20, 30],min_samples_split: [2, 5, 10]
}
grid_search GridSearchCV(estimatorRandomForestClassifier(random_state42), param_gridparam_grid, cv5, n_jobs-1)
grid_search.fit(X_train_subset, y_train)
best_rf grid_search.best_estimator_
y_pred_best_rf best_rf.predict(X_test_subset)
# 计算分类模型准确率
accuracy_best_rf accuracy_score(y_test, y_pred_best_rf)print(f逻辑回归的准确率: {accuracy_lr:.2f})
print(f随机森林的准确率: {accuracy_rf:.2f})
print(f调优后的随机森林的准确率: {accuracy_best_rf:.2f})执行结果
case准确率case1使用逻辑回归模型相同数据集仅使用前2个特征使用100%数据量0.82case2使用随机森林模型相同数据集仅使用前2个特征使用100%数据量0.73case3使用随机森林模型相同数据集仅使用前2个特征使用100%数据量进行超参数调优0.78
同样可以看出数据模型的类型、数据模型的超参数均会影响准确率。
1.泛化能力
以经典的加利福尼亚房价数据集为例演示“数据集、数据模型的调整”对泛化能力的影响该数据集包含20640个样本每个样本有8个特征如房间数、人口、经纬度等。 Tips 这里仅演示“方差”这一个衡量指标需要注意并非方差越低泛化能力就越强。评判一个数据模型的泛化能力通常需要综合考虑多个衡量指标。对于回归问题常用的指标包括MSE、RMSE、MAE和R²对于分类问题常用的指标包括准确率、精确率、召回率、F1分数、AUC-ROC曲线和混淆矩阵。此外交叉验证和学习曲线也是评估模型泛化能力的重要方法。通过综合这些指标可以更全面地评估模型在未见过的数据上的表现。 a.影响因素数据集
在例子中我们分7种case测试
case1使用线性回归模型相同数据集使用所有特征使用1000数据量case2使用线性回归模型相同数据集使用所有特征使用5000数据量case3使用线性回归模型相同数据集使用所有特征使用10000数据量case4使用线性回归模型相同数据集使用所有特征使用20000数据量case5使用线性回归模型相同数据集仅使用前1个特征使用20640数据量case6使用线性回归模型相同数据集仅使用前3个特征使用20640数据量case7使用线性回归模型相同数据集仅使用前5个特征使用20640数据量
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.datasets import fetch_california_housing# 加载加利福尼亚房价数据集
california fetch_california_housing()
X california.data
y california.target# 划分训练集和测试集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)def train_and_evaluate(num_samples):# 线性回归模型model LinearRegression()model.fit(X_train[:num_samples], y_train[:num_samples])y_pred model.predict(X_test)# 计算均方误差mse mean_squared_error(y_test, y_pred)return mse# case1、2、3、4不同数据量的测试结果
for num_samples in [1000, 5000, 10000, 20000]:mse train_and_evaluate(num_samples)print(f使用 {num_samples} 条数据训练测试集均方误差: {mse:.2f})def train_with_features(features):# 线性回归模型model LinearRegression()model.fit(X_train[:, :features], y_train)y_pred model.predict(X_test[:, :features])# 计算均方误差mse mean_squared_error(y_test, y_pred)return mse# case5、6、7使用不同特征组合
# 不同特征组合的测试结果
for features in [1, 3, 5]:mse train_with_features(features)print(f使用前 {features} 个特征训练测试集均方误差: {mse:.2f})执行结果
case方差case1使用线性回归模型相同数据集使用所有特征使用1000数据量0.60case2使用线性回归模型相同数据集使用所有特征使用5000数据量0.55case3使用线性回归模型相同数据集使用所有特征使用10000数据量0.55case4使用线性回归模型相同数据集使用所有特征使用20000数据量0.56case5使用线性回归模型相同数据集仅使用前1个特征使用20640数据量0.71case6使用线性回归模型相同数据集仅使用前3个特征使用20640数据量0.66case7使用线性回归模型相同数据集仅使用前5个特征使用20640数据量0.64
从数据可以看出数据模型的数据量不同、特征不同均会影响方差。
b.影响因素数据模型
在例子中我们分4种case测试
case1使用线性回归模型相同数据集使用所有特征使用20640数据量case2使用决策树回归模型相同数据集使用所有特征使用20640数据量case3使用随机森林回归模型相同数据集使用所有特征使用20640数据量case4使用随机森林回归模型相同数据集使用所有特征使用20640数据量进行超参数调优
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor# 加载加利福尼亚房价数据集
california fetch_california_housing()
X california.data
y california.target# 划分训练集和测试集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# case1、2、3线性回归、决策树回归和随机森林回归模型
models {Linear Regression: LinearRegression(),Decision Tree Regressor: DecisionTreeRegressor(),Random Forest Regressor: RandomForestRegressor()
}# 训练和评估模型
for name, model in models.items():model.fit(X_train, y_train)y_pred model.predict(X_test)mse mean_squared_error(y_test, y_pred)print(f{name} 均方误差: {mse:.2f})# case4超参数调优
# 定义超参数网格
param_grid {n_estimators: [10, 50, 100],max_depth: [None, 10, 20, 30],min_samples_split: [2, 5, 10]
}# 随机森林回归模型
rf RandomForestRegressor()# 网格搜索使用单CPU执行很慢建议使用下面优化的网格搜索
# grid_search GridSearchCV(estimatorrf, param_gridparam_grid, cv5, scoringneg_mean_squared_error)# 网格搜索使用所有可用的CPU
# 参数解释
# n_jobs-1使用所有可用的 CPU 核心进行并行计算。
# cv5使用5折交叉验证来评估每个超参数组合的性能。
# scoringneg_mean_squared_error使用负均方误差作为评估指标因为 GridSearchCV 期望一个越大越好的评分指标。
grid_search GridSearchCV(estimatorrf, param_gridparam_grid, cv5, scoringneg_mean_squared_error, n_jobs-1)
grid_search.fit(X_train, y_train)# 最佳超参数
best_params grid_search.best_params_
print(f最佳超参数: {best_params})# 使用最佳超参数训练模型
best_rf grid_search.best_estimator_
y_pred best_rf.predict(X_test)
mse mean_squared_error(y_test, y_pred)
print(f调优后的随机森林均方误差: {mse:.2f})执行结果
case方差case1使用线性回归模型相同数据集使用所有特征使用20640数据量0.56case2使用决策树回归模型相同数据集使用所有特征使用20640数据量0.50case3使用随机森林回归模型相同数据集使用所有特征使用20640数据量0.26case4使用随机森林回归模型相同数据集使用所有特征使用20640数据量进行超参数调优0.25
同样可以看出数据模型的类型、数据模型的超参数均会影响方差。
2.其他性能指标
除“准确性”和“泛化能力”之外其他性能指标并非核心指标这里仅选取“训练速度”演示一下。
a.影响因素数据集
数据量和数据特征对训练速度的影响比较简单易懂通常情况下越多越慢所以就不在这里做演示了。
b.影响因素数据模型
以经典的鸢尾花数据集为例演示“数据模型类型、数据模型参数”对准确性的影响。
在例子中我们分2种case测试
case1使用逻辑回归模型相同数据集使用所有特征使用所有数据量case2使用向量机SVM模型相同数据集使用所有特征使用所有数据量
执行以下代码
# 导入必要的库
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.metrics import accuracy_score
import time# 加载鸢尾花数据集
iris datasets.load_iris()
X iris.data
y iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)start_time_lr time.time()
# 逻辑回归模型
model_lr LogisticRegression()
model_lr.fit(X_train, y_train)
predictions_lr model_lr.predict(X_test)
# 计算分类模型准确率
accuracy_lr accuracy_score(y_test, predictions_lr)
end_time_lr time.time()
print(逻辑回归模型准确率, accuracy_lr)
print(逻辑回归模型训练耗时, end_time_lr - start_time_lr, 秒)start_time_svm time.time()
# 支持向量机SVM模型
model_svm SVC(kernellinear)
model_svm.fit(X_train, y_train)
predictions_svm model_svm.predict(X_test)
# 计算分类模型准确率
accuracy_svm accuracy_score(y_test, predictions_svm)
end_time_svm time.time()
print(SVM模型准确率, accuracy_svm)
print(SVM模型训练耗时, end_time_svm - start_time_svm, 秒)执行结果
case训练耗时 (秒)case1使用逻辑回归模型相同数据集使用所有特征使用所有数据量0.016212940216064453case2使用向量机SVM模型相同数据集使用所有特征使用所有数据量0.002279996871948242
明显可以看到向量机SVM模型比逻辑回归模型的训练速度更快。
三、归纳 Tips 准确性的实操演示只以“准确率”这一个衡量指标做了演示泛化能力的实操演示只以“方差”这一个衡量指标做了演示;其他同样重要的衡量指标不在这里做演示毕竟本文仅仅是入门文章当读者有一定基础之后可以自行研究其他衡量指标的实操。 调优方向调优内容调优方式补充数据集数据量增加数据量更多的数据通常可以帮助模型更好地学习数据的模式和规律提高模型的准确性。当然数据量越多准确性越高但是训练速度也会越低实际应用中需要酌情选择适量数据集。特征⭐⭐⭐ 特征选择选择最相关的特征减少噪声和冗余特征提高模型的准确性 特征提取从原始数据中提取新的特征帮助模型更好地捕捉数据的模式 特征转换对特征进行变换如标准化、归一化等使特征更适合模型的使用。 特征选取的足够好既能提高模型的准确性也能提升模型的训练速度。数据模型模型类型⭐⭐选择合适的模型根据问题的性质选择合适的模型类型如分类、回归、聚类等以提高模型的准确性。同样模型选取的足够好既能提高模型的准确性也能提升模型的训练速度。模型参数⭐⭐⭐ 调优模型参数通过网格搜索、随机搜索等方法调优模型的超参数以找到最佳的参数组合提高模型准确性 正则化使用正则化方法如L1正则化、L2正则化控制模型的复杂度避免过拟合提高模型的泛化能力。 本文缺少对超参数的介绍后续会在“参数调优”的文章中补充帮助读者入门“超参数”感谢理解。
四、寄语
在撰写本文的过程中我深刻体会到参数调整的重要性和复杂性。虽然目前我还未达到“调优”的水平但希望通过本文的实操演示能帮助大家了解哪些操作会对数据训练产生影响。 机器学习的世界广阔而深邃参数调整只是其中的一部分。希望大家在学习的过程中不断探索和实践逐步提升自己的技能。未来我也会继续学习和分享更多关于“参数调优”的内容期待与大家共同进步。
五、材料
机器学习数据集库目前维护着665个开源数据集读者可以查看、下载、上传数据集。机器学习python库scikit-learn基于python的机器学习接口库提供功能丰富的机器学习接口如下载数据集、训练、调参等。机器学习python库tensorflow基于python的机器学习接口库通过交互式代码示例了解如何使用直观的API。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83826.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!