{"id":165,"date":"2026-05-24T10:13:03","date_gmt":"2026-05-24T02:13:03","guid":{"rendered":"https:\/\/www.xzqbear.com\/?p=165"},"modified":"2026-05-24T10:13:03","modified_gmt":"2026-05-24T02:13:03","slug":"%e8%ae%b0%e5%bd%95%e4%b8%80%e6%ac%a1julia%e6%89%8b%e6%92%95%e9%ab%98%e6%96%af%e8%bf%87%e7%a8%8b%e5%88%86%e7%b1%bb%e7%9a%84%e7%bb%8f%e9%aa%8c","status":"publish","type":"post","link":"https:\/\/www.xzqbear.com\/index.php\/2026\/05\/24\/%e8%ae%b0%e5%bd%95%e4%b8%80%e6%ac%a1julia%e6%89%8b%e6%92%95%e9%ab%98%e6%96%af%e8%bf%87%e7%a8%8b%e5%88%86%e7%b1%bb%e7%9a%84%e7%bb%8f%e9%aa%8c\/","title":{"rendered":"\u8bb0\u5f55\u4e00\u6b21Julia\u624b\u6495\u9ad8\u65af\u8fc7\u7a0b\u5206\u7c7b\u7684\u7ecf\u9a8c"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u9ad8\u65af\u8fc7\u7a0b\u5206\u7c7b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u672c\u6587\u7ae0\u4e0d\u592a\u6d89\u53ca\u7406\u8bba\u4e0a\u7684\u95ee\u9898\uff0c\u800c\u662f\u8ba8\u8bba\u5728\u5df2\u6709\u7b97\u6cd5\u7684\u60c5\u51b5\u4e0b\uff0c\u5982\u4f55\u4eceJulia\u5de5\u7a0b\u5b9e\u8df5\u7684\u89d2\u5ea6\u52a0\u901f\u6211\u4eec\u7684\u6570\u503c\u8ba1\u7b97\uff0c\u53ef\u4ee5\u8bf4Julia\u5728\u52a0\u901f\u524d\u540e\u7684\u5dee\u8ddd\u5df2\u7ecf\u7c7b\u4f3cPython\u548cC++\u7684\u901f\u5ea6\u5dee\u8ddd\u4e86\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u7531\u4e8eJulia\u4e0d\u662f\u9762\u5411\u5bf9\u8c61\u8bed\u8a00\uff0c\u56e0\u6b64\u5728\u5199\u6709\u5173\u673a\u5668\u5b66\u4e60\u7684\u5e93\u65f6\uff0c\u5f88\u96be\u6548\u4eff <code>scikit-learn<\/code> \u7684\u63a5\u53e3\uff0c\u5728Julia\u5f53\u4e2d\u53ea\u80fd\u4f7f\u7528\u7c7b\u4f3c\u7684\u7ed3\u6784\u4f53\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">Julia<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>mutable struct GPC{K&lt;:Kernel}\n    kernel::K\n    X::Matrix{Float64}          # \u8bad\u7ec3\u8f93\u5165\n    y::Vector{Float64}          # \u8bad\u7ec3\u6807\u7b7e \u00b11\n    \u03b1::Vector{Float64}          # \u9884\u6d4b\u65f6\u7528\u7684\u7cfb\u6570\n    L::Matrix{Float64}          # Cholesky \u5206\u89e3 (I + W^{1\/2} K W^{1\/2})\n    f_hat::Vector{Float64}      # \u540e\u9a8c\u4f17\u6570\n    W::Vector{Float64}          # \u8d1f Hessian \u5bf9\u89d2\u7ebf\nend\n\n# \u4e0b\u9762\u662f\u6784\u9020\u51fd\u6570\nfunction GPC(kernel::K) where {K&lt;:Kernel}\n    return GPC{K}(\n        kernel,\n        Matrix{Float64}(undef,0,0),\n        Float64[],\n        Float64[],\n        Matrix{Float64}(undef,0,0),\n        Float64[],\n        Float64[]\n    )\nend<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">mutable struct<\/span><span style=\"color: #E1E4E8\"> GPC{K<\/span><span style=\"color: #F97583\">&lt;:<\/span><span style=\"color: #79B8FF\">Kernel<\/span><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    kernel<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">K<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    X<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">Matrix{Float64}<\/span><span style=\"color: #E1E4E8\">          <\/span><span style=\"color: #6A737D\"># \u8bad\u7ec3\u8f93\u5165<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    y<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">Vector{Float64}<\/span><span style=\"color: #E1E4E8\">          <\/span><span style=\"color: #6A737D\"># \u8bad\u7ec3\u6807\u7b7e \u00b11<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    \u03b1<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">Vector{Float64}<\/span><span style=\"color: #E1E4E8\">          <\/span><span style=\"color: #6A737D\"># \u9884\u6d4b\u65f6\u7528\u7684\u7cfb\u6570<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    L<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">Matrix{Float64}<\/span><span style=\"color: #E1E4E8\">          <\/span><span style=\"color: #6A737D\"># Cholesky \u5206\u89e3 (I + W^{1\/2} K W^{1\/2})<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    f_hat<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">Vector{Float64}<\/span><span style=\"color: #E1E4E8\">      <\/span><span style=\"color: #6A737D\"># \u540e\u9a8c\u4f17\u6570<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    W<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">Vector{Float64}<\/span><span style=\"color: #E1E4E8\">          <\/span><span style=\"color: #6A737D\"># \u8d1f Hessian \u5bf9\u89d2\u7ebf<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">end<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># \u4e0b\u9762\u662f\u6784\u9020\u51fd\u6570<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">GPC<\/span><span style=\"color: #E1E4E8\">(kernel<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">K<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">where<\/span><span style=\"color: #E1E4E8\"> {K<\/span><span style=\"color: #F97583\">&lt;:<\/span><span style=\"color: #79B8FF\">Kernel<\/span><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">GPC{K}<\/span><span style=\"color: #E1E4E8\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        kernel,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">Matrix{Float64}<\/span><span style=\"color: #E1E4E8\">(undef,<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">,<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        Float64[],<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        Float64[],<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">Matrix{Float64}<\/span><span style=\"color: #E1E4E8\">(undef,<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">,<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        Float64[],<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        Float64[]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">end<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u5bf9\u4e8eKernel\uff0c\u6211\u4eec\u9700\u8981\u9884\u5148\u5b9a\u4e49\uff0c\u8003\u8651\u4f7f\u7528RBF\u6838\uff0c\u6b64\u65f6\u4e3a\u9002\u5e94\u6838\u77e9\u9635\u7684\u8ba1\u7b97\uff0c\u9700\u8981\u901a\u8fc7\u591a\u91cd\u6d3e\u53d1\u5b9e\u73b0\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">Julia<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>begin\n    abstract type Kernel end\n\n    struct SEKernel &lt;: Kernel\n        \u03c3::Float64   # \u4fe1\u53f7\u65b9\u5dee\n        \u2113::Float64   # \u957f\u5ea6\u5c3a\u5ea6\n    end\n\n    # \u6709\u9ed8\u8ba4\u503c\u7684\u6790\u6784\u51fd\u6570\n    SEKernel(; \u03c3=1.0, \u2113=1.0) = SEKernel(\u03c3, \u2113)\n\n\n    # \u6838\u51fd\u6570\uff1a\u5355\u4e2a\u6837\u672c\u5bf9\u5355\u4e2a\u6837\u672c\n    function (\u03ba::SEKernel)(x1::V1, x2::V2) where {V1&lt;:AbstractVector, V2&lt;:AbstractVector}\n        sqdist = norm(x1 - x2, 2)\n        return \u03ba.\u03c3^2 * exp(-sqdist \/ (2 * \u03ba.\u2113^2))\n    end\n\n    # \u6838\u51fd\u6570\uff1a\u5355\u4e2a\u6837\u672c\u5bf9\u4e00\u6279\u6837\u672c\n    function (\u03ba::SEKernel)(x1::V, x2::M) where {V&lt;:AbstractVector, M&lt;:AbstractMatrix}\n        m = size(x2, 1)\n\n        K = Vector{Float64}(undef, m)\n\n        for j in 1:m\n            row_j = @view x2&#91;j, :&#93;\n            K&#91;j&#93; = \u03ba(x1, row_j)\n        end\n\n        return K\n    end\n    \n    # \u6838\u51fd\u6570\uff1a\u4e00\u6279\u6837\u672c\u5bf9\u4e00\u6279\u6837\u672c\n    function (\u03ba::SEKernel)(x1::M1, x2::M2) where {M1&lt;:AbstractMatrix, M2&lt;:AbstractMatrix}\n        n = size(x1, 1)\n        m = size(x2, 1)\n\n        K = Matrix{Float64}(undef, n, m)\n        for i in 1:n\n            row_i = @view x1&#91;i, :&#93;\n            for j in 1:m\n                row_j = @view x2&#91;j, :&#93;\n                K&#91;i,j&#93; = \u03ba(row_i, row_j)\n            end\n        end\n        return K\n    end\nend<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">abstract type<\/span><span style=\"color: #E1E4E8\"> Kernel <\/span><span style=\"color: #F97583\">end<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">struct<\/span><span style=\"color: #E1E4E8\"> SEKernel <\/span><span style=\"color: #F97583\">&lt;:<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">Kernel<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        \u03c3<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">Float64<\/span><span style=\"color: #E1E4E8\">   <\/span><span style=\"color: #6A737D\"># \u4fe1\u53f7\u65b9\u5dee<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        \u2113<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">Float64<\/span><span style=\"color: #E1E4E8\">   <\/span><span style=\"color: #6A737D\"># \u957f\u5ea6\u5c3a\u5ea6<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">end<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># \u6709\u9ed8\u8ba4\u503c\u7684\u6790\u6784\u51fd\u6570<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #B392F0\">SEKernel<\/span><span style=\"color: #E1E4E8\">(; \u03c3<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">1.0<\/span><span style=\"color: #E1E4E8\">, \u2113<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">1.0<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">SEKernel<\/span><span style=\"color: #E1E4E8\">(\u03c3, \u2113)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># \u6838\u51fd\u6570\uff1a\u5355\u4e2a\u6837\u672c\u5bf9\u5355\u4e2a\u6837\u672c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #E1E4E8\"> (\u03ba<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">SEKernel<\/span><span style=\"color: #E1E4E8\">)(x1<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">V1<\/span><span style=\"color: #E1E4E8\">, x2<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">V2<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">where<\/span><span style=\"color: #E1E4E8\"> {V1<\/span><span style=\"color: #F97583\">&lt;:<\/span><span style=\"color: #79B8FF\">AbstractVector<\/span><span style=\"color: #E1E4E8\">, V2<\/span><span style=\"color: #F97583\">&lt;:<\/span><span style=\"color: #79B8FF\">AbstractVector<\/span><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        sqdist <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">norm<\/span><span style=\"color: #E1E4E8\">(x1 <\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #E1E4E8\"> x2, <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> \u03ba<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">\u03c3<\/span><span style=\"color: #F97583\">^<\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">exp<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #E1E4E8\">sqdist <\/span><span style=\"color: #F97583\">\/<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #E1E4E8\"> \u03ba<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">\u2113<\/span><span style=\"color: #F97583\">^<\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">end<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># \u6838\u51fd\u6570\uff1a\u5355\u4e2a\u6837\u672c\u5bf9\u4e00\u6279\u6837\u672c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #E1E4E8\"> (\u03ba<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">SEKernel<\/span><span style=\"color: #E1E4E8\">)(x1<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">V<\/span><span style=\"color: #E1E4E8\">, x2<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">M<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">where<\/span><span style=\"color: #E1E4E8\"> {V<\/span><span style=\"color: #F97583\">&lt;:<\/span><span style=\"color: #79B8FF\">AbstractVector<\/span><span style=\"color: #E1E4E8\">, M<\/span><span style=\"color: #F97583\">&lt;:<\/span><span style=\"color: #79B8FF\">AbstractMatrix<\/span><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        m <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">size<\/span><span style=\"color: #E1E4E8\">(x2, <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        K <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">Vector{Float64}<\/span><span style=\"color: #E1E4E8\">(undef, m)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> j <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #F97583\">:<\/span><span style=\"color: #E1E4E8\">m<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            row_j <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">@view<\/span><span style=\"color: #E1E4E8\"> x2&#91;j, :&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            K&#91;j&#93; <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">\u03ba<\/span><span style=\"color: #E1E4E8\">(x1, row_j)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">end<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> K<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #6A737D\"># \u6838\u51fd\u6570\uff1a\u4e00\u6279\u6837\u672c\u5bf9\u4e00\u6279\u6837\u672c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #E1E4E8\"> (\u03ba<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">SEKernel<\/span><span style=\"color: #E1E4E8\">)(x1<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">M1<\/span><span style=\"color: #E1E4E8\">, x2<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">M2<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">where<\/span><span style=\"color: #E1E4E8\"> {M1<\/span><span style=\"color: #F97583\">&lt;:<\/span><span style=\"color: #79B8FF\">AbstractMatrix<\/span><span style=\"color: #E1E4E8\">, M2<\/span><span style=\"color: #F97583\">&lt;:<\/span><span style=\"color: #79B8FF\">AbstractMatrix<\/span><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        n <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">size<\/span><span style=\"color: #E1E4E8\">(x1, <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        m <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">size<\/span><span style=\"color: #E1E4E8\">(x2, <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        K <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">Matrix{Float64}<\/span><span style=\"color: #E1E4E8\">(undef, n, m)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> i <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #F97583\">:<\/span><span style=\"color: #E1E4E8\">n<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            row_i <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">@view<\/span><span style=\"color: #E1E4E8\"> x1&#91;i, :&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> j <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #F97583\">:<\/span><span style=\"color: #E1E4E8\">m<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                row_j <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">@view<\/span><span style=\"color: #E1E4E8\"> x2&#91;j, :&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">                K&#91;i,j&#93; <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">\u03ba<\/span><span style=\"color: #E1E4E8\">(row_i, row_j)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> K<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">end<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0a\u8ff0\u5c31\u662f\u57fa\u672c\u7684\u63a5\u53e3\u5b9a\u4e49\uff0c\u6b64\u65f6\u4e3a\u4e86\u89e3\u51b3\u4efb\u52a1\uff0c\u8fd8\u9700\u8981\u5982\u4e0b\u7684\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>fit!<\/code> \uff1a\u5c31\u5730\u62df\u5408\u6a21\u578b\u7684\u63a5\u53e3\uff0c\u9ad8\u65af\u8fc7\u7a0b\u4e8c\u5206\u7c7b\u7684\u5b9e\u73b0\u76f8\u5bf9\u6bd4\u8f83\u590d\u6742\uff0c\u53ef\u80fd\u9700\u8981\u7406\u89e3\u5982\u4e0b\u7684\u4e00\u4e9b\u6982\u5ff5\uff1a\n<ul class=\"wp-block-list\">\n<li>Laplace \u8fd1\u4f3c<\/li>\n\n\n\n<li>\u671f\u671b\u4f20\u64ad<\/li>\n\n\n\n<li>\u53d8\u5206\u63a8\u65ad\u65b9\u6cd5<\/li>\n\n\n\n<li>Cholesky \u5206\u89e3<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><code>predict<\/code> \uff1a\u9884\u6d4b\u6570\u636e\u7684\u63a5\u53e3\uff0c\u76f8\u5bf9\u7b80\u5355\uff0c\u5c31\u662f\u9700\u8981\u5229\u7528\u6570\u503c\u79ef\u5206\uff0c\u5728\u672c\u6587\u5f53\u4e2d\u4e3a\u7b80\u4fbf\u8d77\u89c1\u4f7f\u7528 <a href=\"https:\/\/juliapackages.com\/p\/QuadGK\" target=\"_blank\" rel=\"noreferrer noopener\">QuadGK.jl<\/a> \u5e93\u6765\u5b9e\u73b0\u7b80\u5355\u7684\u6570\u503c\u79ef\u5206.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0a\u8ff0\u7684\u5199\u6cd5\u6709\u4e00\u4e9b\u5229\u7528\u4e86 Julia \u7279\u6027\u7684\u7ed3\u6784\uff0c\u5176\u4e2d\u4e00\u4e2a\u5c31\u662f\u7c7b\u578b\u6ce8\u89e3\uff0c\u6ce8\u610f\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">Julia<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>function (\u03ba::SEKernel)(x1::V1, x2::V2) where {V1&lt;:AbstractVector, V2&lt;:AbstractVector}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #E1E4E8\"> (\u03ba<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">SEKernel<\/span><span style=\"color: #E1E4E8\">)(x1<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">V1<\/span><span style=\"color: #E1E4E8\">, x2<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">V2<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">where<\/span><span style=\"color: #E1E4E8\"> {V1<\/span><span style=\"color: #F97583\">&lt;:<\/span><span style=\"color: #79B8FF\">AbstractVector<\/span><span style=\"color: #E1E4E8\">, V2<\/span><span style=\"color: #F97583\">&lt;:<\/span><span style=\"color: #79B8FF\">AbstractVector<\/span><span style=\"color: #E1E4E8\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u548c<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">Julia<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>function (\u03ba::SEKernel)(x1::AbstractVector, x2::AbstractVector)<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #E1E4E8\"> (\u03ba<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">SEKernel<\/span><span style=\"color: #E1E4E8\">)(x1<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">AbstractVector<\/span><span style=\"color: #E1E4E8\">, x2<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">AbstractVector<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e8c\u8005\u4e4b\u95f4\u5177\u6709\u672c\u8d28\u4e0a\u7684\u5dee\u8ddd\uff0c\u56e0\u4e3a Julia \u4f1a\u6839\u636e\u5177\u4f53\u7684\u6570\u503c\u7c7b\u578b\u6765\u7279\u5b9a\u4f18\u5316\uff0c\u524d\u8005\u8981\u66f4\u597d\uff0c\u540e\u8005\u5728\u8ba1\u7b97\u65f6\u7f16\u8bd1\u5668\u65e0\u6cd5\u8bc6\u522b\u51fd\u6570\u5f53\u4e2d\u7684 <code>x1<\/code> \u662f\u4ec0\u4e48\u7c7b\u578b\uff0c\u53ef\u80fd\u65e0\u6cd5\u8c03\u7528 BLAS \u7b49\u5e38\u7528\u9ad8\u6027\u80fd\u8ba1\u7b97\u5de5\u5177\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u62df\u5408\u51fd\u6570<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u62df\u5408\u51fd\u6570 <code>fit!<\/code> \u7684\u8ba1\u7b97\u662f\u9ad8\u65af\u8fc7\u7a0b\u5206\u7c7b\u5b9e\u73b0\u7684\u6838\u5fc3\uff0c\u4e5f\u662f\u8ba1\u7b97\u8017\u65f6\u7684\u5927\u5934\uff0c\u4e0b\u9762\u6211\u4eec\u76f4\u63a5\u7ed9\u51fa\u4ee3\u7801\u9010\u4e2a\u89e3\u6790\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">Julia<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>function fit!(model::GPC,\n\t\t\t  X::M,\n\t\t\t  y::T,\n\t\t\t  max_iter::Int64 = 1000,\n\t\t\t  alpha::Float64 = 0.05,\n\t\t\t  tol::Float64 = 1e-5;\n\t\t\t  verbose::Bool = false) where {T&lt;:AbstractVector,M&lt;:AbstractMatrix}\n\n\tX_train = Matrix{Float64}(X)\n\ty_train = Vector{Float64}(y)\n\n\tK = model.kernel(X_train, X_train)\n\t@inbounds for i in axes(K, 1)\n\t\tK&#91;i, i&#93; += 1e-6\n\tend\n\n\tn = length(y_train)\n\tf = zeros(Float64, n)\n\tgrad = zeros(Float64, n)\n\tw = zeros(Float64, n)\n\tsqrt_w = zeros(Float64, n)\n\ta = zeros(Float64, n)\n\trhs = zeros(Float64, n)\n\tdirection = zeros(Float64, n)\n\tB = similar(K)\n\n\terr = tol + 1\n\titer = 0\n\tL = Matrix{Float64}(undef, 0, 0)\n\n\twhile (err > tol) &amp;&amp; (iter &lt; max_iter)\n\t\tif verbose\n\t\t\tprintln(\"\u7b2c $(iter + 1) \u6b21\u8fed\u4ee3\")\n\t\tend\n\n\t\tneg_hessian_diag!(w, f)\n\t\t@. sqrt_w = sqrt(w)\n\n\t\t# \u6570\u503c\u7a33\u5b9a\u5316\u5e76\u6c42\u89e3\u725b\u987f\u65b9\u5411\n\t\tcopyto!(B, K)\n\t\trmul!(B, Diagonal(sqrt_w))\n\t\tlmul!(Diagonal(sqrt_w), B)\n\n\t\t@inbounds for i in axes(B, 1)\n\t\t\tB&#91;i, i&#93; += 1.0 + 1e-8\n\t\tend\n\n\t\tF = cholesky!(Hermitian(B))\n\t\tL = Matrix(F.L)\n\n\t\tgrad_log_likelihood!(grad, y_train, f)\n\t\t@. rhs = w * f + grad\n\t\tmul!(a, K, rhs)\n\t\t@. a = sqrt_w * a\n\t\tldiv!(LowerTriangular(L), a)\n\t\tldiv!(UpperTriangular(L'), a)\n\t\t@. a = sqrt_w * a\n\n\t\tmul!(direction, K, a)\n\n\t\t# \u66f4\u65b0\u8fed\u4ee3\u72b6\u6001\uff0c\u907f\u514d\u751f\u6210\u65b0\u7684 f \u5411\u91cf\n\t\terr_sq = 0.0\n\t\t@inbounds for i in eachindex(f, direction)\n\t\t\tstep = direction&#91;i&#93; - f&#91;i&#93;\n\t\t\tnew_f = f&#91;i&#93; + alpha * step\n\t\t\tdiff = f&#91;i&#93; - new_f\n\t\t\terr_sq += diff * diff\n\t\t\tf&#91;i&#93; = new_f\n\t\tend\n\n\t\terr = sqrt(err_sq)\n\t\titer += 1\n\n\t\tif verbose\n\t\t\tprintln(\"err = $err\")\n\t\tend\n\tend\n\n\t# \u6536\u655b\u540e\u5c06\u7ed3\u679c\u5199\u56de\u6a21\u578b\n\tgrad_log_likelihood!(grad, y_train, f)\n\tmodel.f_hat = copy(f)\n\tmodel.W = copy(w)\n\tmodel.\u03b1 = copy(grad)   # \u2207 log p(y|f_hat)\n\tmodel.L = L\n\tmodel.X = X_train\n\tmodel.y = y_train\n\n\treturn model\n\nend<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">fit!<\/span><span style=\"color: #E1E4E8\">(model<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">GPC<\/span><span style=\"color: #E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\t  X<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">M<\/span><span style=\"color: #E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\t  y<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">T<\/span><span style=\"color: #E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\t  max_iter<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">Int64<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1000<\/span><span style=\"color: #E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\t  alpha<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">Float64<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0.05<\/span><span style=\"color: #E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\t  tol<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">Float64<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1e-5<\/span><span style=\"color: #E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\t  verbose<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">Bool<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">where<\/span><span style=\"color: #E1E4E8\"> {T<\/span><span style=\"color: #F97583\">&lt;:<\/span><span style=\"color: #79B8FF\">AbstractVector<\/span><span style=\"color: #E1E4E8\">,M<\/span><span style=\"color: #F97583\">&lt;:<\/span><span style=\"color: #79B8FF\">AbstractMatrix<\/span><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\tX_train <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">Matrix{Float64}<\/span><span style=\"color: #E1E4E8\">(X)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\ty_train <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">Vector{Float64}<\/span><span style=\"color: #E1E4E8\">(y)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\tK <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> model<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #79B8FF\">kernel<\/span><span style=\"color: #E1E4E8\">(X_train, X_train)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t<\/span><span style=\"color: #79B8FF\">@inbounds<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> i <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">axes<\/span><span style=\"color: #E1E4E8\">(K, <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\tK&#91;i, i&#93; <\/span><span style=\"color: #F97583\">+=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1e-6<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t<\/span><span style=\"color: #F97583\">end<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\tn <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">length<\/span><span style=\"color: #E1E4E8\">(y_train)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\tf <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">zeros<\/span><span style=\"color: #E1E4E8\">(Float64, n)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\tgrad <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">zeros<\/span><span style=\"color: #E1E4E8\">(Float64, n)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\tw <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">zeros<\/span><span style=\"color: #E1E4E8\">(Float64, n)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\tsqrt_w <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">zeros<\/span><span style=\"color: #E1E4E8\">(Float64, n)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\ta <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">zeros<\/span><span style=\"color: #E1E4E8\">(Float64, n)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\trhs <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">zeros<\/span><span style=\"color: #E1E4E8\">(Float64, n)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\tdirection <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">zeros<\/span><span style=\"color: #E1E4E8\">(Float64, n)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\tB <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">similar<\/span><span style=\"color: #E1E4E8\">(K)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\terr <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> tol <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\titer <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\tL <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">Matrix{Float64}<\/span><span style=\"color: #E1E4E8\">(undef, <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t<\/span><span style=\"color: #F97583\">while<\/span><span style=\"color: #E1E4E8\"> (err <\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #E1E4E8\"> tol) <\/span><span style=\"color: #F97583\">&amp;&amp;<\/span><span style=\"color: #E1E4E8\"> (iter <\/span><span style=\"color: #F97583\">&lt;<\/span><span style=\"color: #E1E4E8\"> max_iter)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> verbose<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\t<\/span><span style=\"color: #79B8FF\">println<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;\u7b2c <\/span><span style=\"color: #79B8FF\">$(iter <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #79B8FF\"> 1)<\/span><span style=\"color: #9ECBFF\"> \u6b21\u8fed\u4ee3&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #F97583\">end<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #79B8FF\">neg_hessian_diag!<\/span><span style=\"color: #E1E4E8\">(w, f)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #79B8FF\">@.<\/span><span style=\"color: #E1E4E8\"> sqrt_w <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">sqrt<\/span><span style=\"color: #E1E4E8\">(w)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #6A737D\"># \u6570\u503c\u7a33\u5b9a\u5316\u5e76\u6c42\u89e3\u725b\u987f\u65b9\u5411<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #79B8FF\">copyto!<\/span><span style=\"color: #E1E4E8\">(B, K)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #79B8FF\">rmul!<\/span><span style=\"color: #E1E4E8\">(B, <\/span><span style=\"color: #79B8FF\">Diagonal<\/span><span style=\"color: #E1E4E8\">(sqrt_w))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #79B8FF\">lmul!<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">Diagonal<\/span><span style=\"color: #E1E4E8\">(sqrt_w), B)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #79B8FF\">@inbounds<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> i <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">axes<\/span><span style=\"color: #E1E4E8\">(B, <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\tB&#91;i, i&#93; <\/span><span style=\"color: #F97583\">+=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1.0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1e-8<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #F97583\">end<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\tF <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">cholesky!<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">Hermitian<\/span><span style=\"color: #E1E4E8\">(B))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\tL <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">Matrix<\/span><span style=\"color: #E1E4E8\">(F<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">L)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #79B8FF\">grad_log_likelihood!<\/span><span style=\"color: #E1E4E8\">(grad, y_train, f)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #79B8FF\">@.<\/span><span style=\"color: #E1E4E8\"> rhs <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> w <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #E1E4E8\"> f <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> grad<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #79B8FF\">mul!<\/span><span style=\"color: #E1E4E8\">(a, K, rhs)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #79B8FF\">@.<\/span><span style=\"color: #E1E4E8\"> a <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> sqrt_w <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #E1E4E8\"> a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #79B8FF\">ldiv!<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">LowerTriangular<\/span><span style=\"color: #E1E4E8\">(L), a)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #79B8FF\">ldiv!<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">UpperTriangular<\/span><span style=\"color: #E1E4E8\">(L<\/span><span style=\"color: #F97583\">&#39;<\/span><span style=\"color: #E1E4E8\">), a)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #79B8FF\">@.<\/span><span style=\"color: #E1E4E8\"> a <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> sqrt_w <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #E1E4E8\"> a<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #79B8FF\">mul!<\/span><span style=\"color: #E1E4E8\">(direction, K, a)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #6A737D\"># \u66f4\u65b0\u8fed\u4ee3\u72b6\u6001\uff0c\u907f\u514d\u751f\u6210\u65b0\u7684 f \u5411\u91cf<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\terr_sq <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0.0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #79B8FF\">@inbounds<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> i <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">eachindex<\/span><span style=\"color: #E1E4E8\">(f, direction)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\tstep <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> direction&#91;i&#93; <\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #E1E4E8\"> f&#91;i&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\tnew_f <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> f&#91;i&#93; <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> alpha <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #E1E4E8\"> step<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\tdiff <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> f&#91;i&#93; <\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #E1E4E8\"> new_f<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\terr_sq <\/span><span style=\"color: #F97583\">+=<\/span><span style=\"color: #E1E4E8\"> diff <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #E1E4E8\"> diff<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\tf&#91;i&#93; <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> new_f<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #F97583\">end<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\terr <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">sqrt<\/span><span style=\"color: #E1E4E8\">(err_sq)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\titer <\/span><span style=\"color: #F97583\">+=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> verbose<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\t<\/span><span style=\"color: #79B8FF\">println<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&quot;err = <\/span><span style=\"color: #79B8FF\">$err<\/span><span style=\"color: #9ECBFF\">&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t<\/span><span style=\"color: #F97583\">end<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t<\/span><span style=\"color: #F97583\">end<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t<\/span><span style=\"color: #6A737D\"># \u6536\u655b\u540e\u5c06\u7ed3\u679c\u5199\u56de\u6a21\u578b<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t<\/span><span style=\"color: #79B8FF\">grad_log_likelihood!<\/span><span style=\"color: #E1E4E8\">(grad, y_train, f)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\tmodel<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">f_hat <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">copy<\/span><span style=\"color: #E1E4E8\">(f)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\tmodel<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">W <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">copy<\/span><span style=\"color: #E1E4E8\">(w)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\tmodel<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">\u03b1 <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">copy<\/span><span style=\"color: #E1E4E8\">(grad)   <\/span><span style=\"color: #6A737D\"># \u2207 log p(y|f_hat)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\tmodel<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">L <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> L<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\tmodel<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">X <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> X_train<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\tmodel<\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #E1E4E8\">y <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> y_train<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t<\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> model<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">end<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5bf9\u7c7b\u578b\u7684\u7279\u5316<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">Julia<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>function fit!(model::GPC,\n\t\t\t  X::M,\n\t\t\t  y::T,\n\t\t\t  max_iter::Int64 = 1000,\n\t\t\t  alpha::Float64 = 0.05,\n\t\t\t  tol::Float64 = 1e-5;\n\t\t\t  verbose::Bool = false) where {T&lt;:AbstractVector,M&lt;:AbstractMatrix}\n\n\tX_train = Matrix{Float64}(X)\n\ty_train = Vector{Float64}(y)<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">function<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">fit!<\/span><span style=\"color: #E1E4E8\">(model<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">GPC<\/span><span style=\"color: #E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\t  X<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">M<\/span><span style=\"color: #E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\t  y<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">T<\/span><span style=\"color: #E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\t  max_iter<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">Int64<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1000<\/span><span style=\"color: #E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\t  alpha<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">Float64<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0.05<\/span><span style=\"color: #E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\t  tol<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">Float64<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1e-5<\/span><span style=\"color: #E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\t\t  verbose<\/span><span style=\"color: #F97583\">::<\/span><span style=\"color: #79B8FF\">Bool<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">where<\/span><span style=\"color: #E1E4E8\"> {T<\/span><span style=\"color: #F97583\">&lt;:<\/span><span style=\"color: #79B8FF\">AbstractVector<\/span><span style=\"color: #E1E4E8\">,M<\/span><span style=\"color: #F97583\">&lt;:<\/span><span style=\"color: #79B8FF\">AbstractMatrix<\/span><span style=\"color: #E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\tX_train <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">Matrix{Float64}<\/span><span style=\"color: #E1E4E8\">(X)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\ty_train <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">Vector{Float64}<\/span><span style=\"color: #E1E4E8\">(y)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u5f00\u5934\u6211\u4eec\u5c06 <code>X,y<\/code> \u8fdb\u884c\u4e86\u5230\u77e9\u9635\u548c\u5411\u91cf\u7684\u5f3a\u5236\u8f6c\u5316\uff0c\u8fd9\u6837\u4e4b\u540e\u7684\u8ba1\u7b97\u5f53\u4e2d\uff0c\u6240\u6709\u7684\u8ba1\u7b97\u90fd\u5c06\u8c03\u7528\u5408\u9002\u7684\u7ebf\u6027\u4ee3\u6570\u5e93\uff0c\u901f\u5ea6\u4e5f\u5c06\u5927\u5927\u63d0\u5347\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5173\u95ed\u8fb9\u754c\u68c0\u67e5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u6211\u4eec\u7684\u7b97\u6cd5\u91cc\u9762\uff0c\u5f88\u591a\u65f6\u5019\u6211\u4eec\u7684\u5faa\u73af\u4e0d\u4f1a\u89e6\u53d1\u8d8a\u754c\uff0c\u56e0\u6b64\u53ef\u4ee5\u5173\u95ed\u8fb9\u754c\u68c0\u67e5\u6765\u5b9e\u73b0\u52a0\u901f\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">Julia<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>@inbounds for i in axes(K, 1)\n    K&#91;i, i&#93; += 1e-6\nend<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #79B8FF\">@inbounds<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> i <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">axes<\/span><span style=\"color: #E1E4E8\">(K, <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    K&#91;i, i&#93; <\/span><span style=\"color: #F97583\">+=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1e-6<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">end<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u91cc\u662f\u5bf9\u77e9\u9635 <code>K<\/code> \u52a0\u4e0a\u4e86\u7a33\u5b9a\u7684\u5bf9\u89d2\u7ebf\u56e0\u5b50\uff0c\u76f8\u5bf9\u7b80\u5355\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u77e9\u9635\u9884\u5206\u914d<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u9884\u5206\u914d\u662f\u4e00\u4e2a\u91cd\u8981\u73af\u8282\uff0c\u5bf9\u4e8e\u5faa\u73af\u91cc\u9762\u4f1a\u53cd\u590d\u7528\u5230\u7684\u4e2d\u95f4\u91cf\uff0c\u4e00\u822c\u7684\u5efa\u8bae\u662f\u63d0\u524d\u5206\u914d\u597d\u7a7a\u95f4\uff0c\u8fd9\u6837\u53ef\u4ee5\u964d\u4f4e GC \u7684\u538b\u529b\uff0c\u5426\u5219\u5faa\u73af\u5f53\u4e2d\u4f1a\u53cd\u590d\u521b\u5efa\u65b0\u7684\u5411\u91cf\u548c\u77e9\u9635\uff0c\u5bf9\u4e8e\u7a20\u5bc6\u77e9\u9635\u8ba1\u7b97\u8fd9\u5c06\u4f1a\u8017\u8d39\u5de8\u91cf\u7684\u5185\u5b58\u3002<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">Julia<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>n = length(y_train)\nf = zeros(Float64, n)\ngrad = zeros(Float64, n)\nw = zeros(Float64, n)\nsqrt_w = zeros(Float64, n)\na = zeros(Float64, n)\nrhs = zeros(Float64, n)\ndirection = zeros(Float64, n)\nB = similar(K)<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #E1E4E8\">n <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">length<\/span><span style=\"color: #E1E4E8\">(y_train)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">f <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">zeros<\/span><span style=\"color: #E1E4E8\">(Float64, n)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">grad <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">zeros<\/span><span style=\"color: #E1E4E8\">(Float64, n)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">w <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">zeros<\/span><span style=\"color: #E1E4E8\">(Float64, n)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">sqrt_w <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">zeros<\/span><span style=\"color: #E1E4E8\">(Float64, n)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">a <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">zeros<\/span><span style=\"color: #E1E4E8\">(Float64, n)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">rhs <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">zeros<\/span><span style=\"color: #E1E4E8\">(Float64, n)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">direction <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">zeros<\/span><span style=\"color: #E1E4E8\">(Float64, n)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">B <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">similar<\/span><span style=\"color: #E1E4E8\">(K)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u79cd\u9884\u5206\u914d\u867d\u7136\u597d\uff0c\u4f46\u662f\u540e\u7eed\u7684\u8ba1\u7b97\u4e5f\u5fc5\u987b\u8981\u642d\u914d\u4e0a\uff0c\u56e0\u4e3a\u5e38\u89c4\u7684\u77e9\u9635\u4e58\u6cd5\u548c Cholesky \u5206\u89e3\u5e76\u4e0d\u662f\u5c31\u5730\u64cd\u4f5c\uff0c\u9700\u8981\u6362\u4e3a\u4e0d\u4f1a\u4ea7\u751f\u65b0\u77e9\u9635\u7684\u5c31\u5730\u64cd\u4f5c\uff0c\u56e0\u6b64\u540e\u9762\u7684\u4ee3\u7801\u5f53\u4e2d\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7528 <code>mul!(a, K, rhs)<\/code> \u66ff\u4ee3 <code>a = K * rhs<\/code> \uff1b<\/li>\n\n\n\n<li><code>ldiv!(LowerTriangular(L), a)<\/code> \u66ff\u4ee3 <code>L \\ a<\/code> \uff0c\u8fd9\u91cc <code>LowerTriangular<\/code>\u00a0\u5b9e\u9645\u4e0a\u8fd8\u6307\u793a\u4e86\u662f\u4e0b\u4e09\u89d2\u65b9\u7a0b\u7ec4\uff0c\u56e0\u6b64\u8ba1\u7b97\u8d77\u6765\u5f88\u5feb\u901f\uff1b<\/li>\n\n\n\n<li><code>cholesky!(Hermitian(B))<\/code> \u4ee3\u66ff <code>cholesky(B)<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0a\u8ff0\u6587\u6863\u8be6\u89c1 <a href=\"https:\/\/docs.julialang.org\/en\/v1\/stdlib\/LinearAlgebra\/#LinearAlgebra.ldiv!\" target=\"_blank\" rel=\"noreferrer noopener\">Julia LinearAlgebra \u5b98\u65b9\u6587\u6863<\/a> \uff0c\u8fd9\u4e9b\u4f18\u5316\u53ef\u4ee5\u7b97\u662f\u6570\u503c\u8ba1\u7b97\u7684\u57fa\u672c\u529f\u4e86\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9ad8\u65af\u8fc7\u7a0b\u5206\u7c7b \u672c\u6587\u7ae0\u4e0d\u592a\u6d89\u53ca\u7406\u8bba\u4e0a\u7684\u95ee\u9898\uff0c\u800c\u662f\u8ba8\u8bba\u5728\u5df2\u6709\u7b97\u6cd5\u7684\u60c5\u51b5\u4e0b\uff0c\u5982\u4f55\u4eceJulia\u5de5\u7a0b\u5b9e\u8df5\u7684\u89d2\u5ea6\u52a0\u901f\u6211\u4eec\u7684 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":168,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[20,21],"class_list":["post-165","post","type-post","status-publish","format-standard","has-post-thumbnail","category-8","tag-julia","tag-21"],"_links":{"self":[{"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/posts\/165","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/comments?post=165"}],"version-history":[{"count":7,"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/posts\/165\/revisions"}],"predecessor-version":[{"id":174,"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/posts\/165\/revisions\/174"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/media\/168"}],"wp:attachment":[{"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/media?parent=165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/categories?post=165"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/tags?post=165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}