r"\$\gamma_0=\$"

本文探讨了sklearn库中BayesianGaussianMixture模型的使用细节,特别是weight_concentration_prior_type参数的选择及其对模型的影响。通过对比不同prior设置下混合模型的表现,深入理解其在有限与无限混合场景中的应用。

学习sklearn-example中有一句代码这样的:

estimators = [
    ("Finite mixture with a Dirichlet distribution\nprior and "
     r"$\gamma_0=$", BayesianGaussianMixture(
        weight_concentration_prior_type="dirichlet_distribution",
        n_components=2 * n_components, reg_covar=0, init_params='random',
        max_iter=1500, mean_precision_prior=.8,
        random_state=random_state), [0.001, 1, 1000]),
    ("Infinite mixture with a Dirichlet process\n prior and" r"$\gamma_0=$",
     BayesianGaussianMixture(
        weight_concentration_prior_type="dirichlet_process",
        n_components=2 * n_components, reg_covar=0, init_params='random',
        max_iter=1500, mean_precision_prior=.8,
        random_state=random_state), [1, 1000, 100000])]

以及这样的:

    plot_results(plt.subplot(gs[0:2, k]), plt.subplot(gs[2, k]), estimator,
                 X, y, r"%s$%.1e$" % (title, concentration),
                 plot_title=k == 0)

对于其中出现的r,不知道起什么作用。

r"$\gamma_0=$"
r"%s$%.1e$" % (title, concentration)

In [8]: d =  r"\$\gamma_0=\$"
In [9]: e =  "\$\gamma_0=\$"
In [10]: print(d,e)
\$\gamma_0=\$ \$\gamma_0=\$
In [11]: d == e
Out[11]: True

好像是没区别,但是是否删除r,颜色却不一样呀,删除后运行,也没看出来什么不一样。在这里插入图片描述在这里插入图片描述

占个坑,以后发现了为什么再来完善。

有一个讲%r的链接:https://stackoverflow.com/questions/19252663/extracting-decimal-numbers-from-a-string

1 % 光学参数关系计算与可视化 % 参数设置 theta = deg2rad(12 ); % 将角度转换为弧度 psi = deg2rad(38.24 ); K = 4.886; R_values = 0:0.1:1.5; % 定义R的取值及步长,修改为0-1.5 num_points = length(R_values); % 预分配存储结果的数组 P_values = zeros(1, num_points); C_values = zeros(1, num_points); gamma1_values = zeros(1, num_points); gamma2_values = zeros(1, num_points); gamma_min_values = zeros(1, num_points); % 迭代计算P、C、gamma1、gamma2、gamma_min for i = 1:num_points R = R_values(i); % 计算P(公式3) term1_numerator_P = (1 + cos(theta)) / (2 * sin(psi/2)^2); term2_numerator_P = sin(theta) / tan(psi/2); numerator_P = K^2 - (term1_numerator_P - term2_numerator_P - cos(theta)) * R^2; term1_denominator_P = (1 - cos(theta)) / (2 * sin(psi/2)^2); term2_denominator_P = sin(theta) / tan(psi/2); denominator_P = term1_denominator_P + term2_denominator_P + cos(theta); % 检查P的计算是否有效 if numerator_P < 0 warning('R = %.1f 时,P的计算结果为复数,使用NaN替代', R); P = NaN; else P = sqrt(numerator_P / denominator_P); end P_values(i) = P; % 计算C(公式4) if ~isnan(P) term1_C = P^2 * (1 - cos(theta)); term2_C = R^2 * (1 + cos(theta)); C = sqrt((term1_C + term2_C) / (2 * sin(psi/2)^2)); else C = NaN; end C_values(i) = C; % 计算gamma1(修正公式) if ~isnan(P) && ~isnan(C) numerator_gamma1 = P^2 + C^2 - (K - R)^2; denominator_gamma1 = 2 * P * C; % 检查gamma1的计算是否有效 if abs(numerator_gamma1 / denominator_gamma1) <= 1 gamma1_rad = acos(numerator_gamma1 / denominator_gamma1); else warning('R = %.1f 时,gamma1的计算结果无效,使用NaN替代', R); gamma1_rad = NaN; end else gamma1_rad = NaN; end gamma1_values(i) = rad2deg(gamma1_rad); % 计算gamma2(公式6和7) if ~isnan(P) && ~isnan(C) numerator_gamma2 = P^2 + C^2 - (K + R)^2; denominator_gamma2 = 2 * P * C; % 检查gamma2的计算是否有效 if abs(numerator_gamma2 / denominator_gamma2) <= 1 gamma2_rad = acos(numerator_gamma2 / denominator_gamma2); % 根据条件判断gamma2的值 if gamma2_rad > pi/2 % 90°转换为弧度 gamma2_rad = pi - gamma2_rad; % 使用180°修正 end else warning('R = %.1f 时,gamma2的计算结果无效,使用NaN替代', R); gamma2_rad = NaN; end else gamma2_rad = NaN; end gamma2_values(i) = rad2deg(gamma2_rad); % 计算gamma_min(公式8) gamma_min_values(i) = min(gamma1_values(i), gamma2_values(i)); end % 创建数据表格 data = [R_values', P_values', C_values', gamma1_values', gamma2_values', gamma_min_values']; columnNames = {'R', 'P', 'C', '\gamma_1(°)', '\gamma_2(°)', '\gamma_{\text{min}}(°)'}; % 创建主图形窗口 fig = uifigure('Position', [100, 100, 1000, 600], 'Name', 'R-P-C-\gamma 关系分析'); % 创建参数信息文本 param_info = uicontrol(fig, 'Style', 'text', ... 'String', sprintf('参数设置: θ=%.2f°, ψ=%.2f°, K=%.2f, R范围=0-1.5', rad2deg(theta), rad2deg(psi), K), ... 'Position', [10, 560, 980, 30], ... 'FontSize', 12, ... 'HorizontalAlignment', 'center'); % 创建表格 uitable(fig, 'Data', data, 'ColumnName', columnNames, ... 'Position', [10, 300, 980, 250], 'FontSize', 10); % 创建P和C随R变化曲线 ax1 = uiaxes(fig, 'Position', [10, 160, 480, 120]); plot(ax1, R_values, P_values, 'b-o', 'LineWidth', 1.5, 'DisplayName', 'P'); hold(ax1, 'on'); plot(ax1, R_values, C_values, 'r-o', 'LineWidth', 1.5, 'DisplayName', 'C'); title(ax1, 'P和C随R变化曲线'); xlabel(ax1, 'R'); ylabel(ax1, '值'); grid(ax1, 'on'); legend(ax1, 'show', 'Location', 'best'); % 创建gamma值随R变化曲线 ax2 = uiaxes(fig, 'Position', [510, 160, 480, 120]); plot(ax2, R_values, gamma1_values, 'b-o', 'LineWidth', 1.5, 'DisplayName', '\gamma_1'); hold(ax2, 'on'); plot(ax2, R_values, gamma2_values, 'r-o', 'LineWidth', 1.5, 'DisplayName', '\gamma_2'); plot(ax2, R_values, gamma_min_values, 'g-o', 'LineWidth', 1.5, 'DisplayName', '\gamma_{\text{min}}'); title(ax2, '\gamma 值随R变化曲线'); xlabel(ax2, 'R'); ylabel(ax2, '角度 (°)'); grid(ax2, 'on'); legend(ax2, 'show', 'Location', 'best');
07-03
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值