【算法】湖心岛上的数学梦--用c#实现一元多次方程的展开式

算法,湖心,岛上,数学,c#,实现,一元,多次,方程,展开式 · 浏览次数 : 366

小编点评

以上内容生成时需要带简单的排版,可以利用以下方法: 1. 使用字符串拼接进行排版 2. 使用List进行排版 3. 使用格式进行排版 例如: 1. 使用字符串拼接进行排版: ```csharp string output = string.Format("{0}{1}{2:+0;}", coeff, a, exp); ``` 2. 使用List进行排版: ```csharp List nka = new List(); nka.Add(new List(){1, 2}); nka.Add(new List(){3, 4}); nka.Add(new List(){5, 6}); ``` 3. 使用格式进行排版: ```csharp Console.Format("{0} {1} {2}", coeff, a, exp); ``` 以上只是一些简单的排版方法,您可以根据需要选择使用哪种方法进行排版。

正文

每天清晨,当第一缕阳光洒在湖面上,一个身影便会出现在湖心小岛上。她坐在一块大石头上,周围被茂盛的植物环绕,安静地沉浸在数学的世界中。

这个姑娘叫小悦,她的故事在这个美丽的湖心小岛上展开。每天早晨,她都会提前来到湖边,仔细观察水下的植物,然后抽出时间来钻研一元x次方程。她身上的气息混合着湖水的清新和植物的芬芳,形成一种独特的味道,让人感到宁静与祥和。

然而,一元x次方程的展开对于小悦来说,并不是一件容易的事。这个看似简单的数学问题,却困扰了她许久。然而,小悦并没有向困难低头,她坚信,只要努力,就一定能够找到解决的方法。

在这座小岛上,小悦度过了无数个早晨。她反复琢磨着方程的特点,尝试寻找解法。有时候,她会陷入深深的思考,甚至忘记时间;有时候,她会突然灵光一闪,兴奋地写下展开式的公式。每一个早晨,小悦都在进步,她的眼中闪耀着对知识的渴望和对梦想的坚定。

终于有一天,通过前面的积累,小悦灵光一闪,意识到她可以通过将一元x次方程的每一项分别展开,然后再将这些展开式合并起来,得到一元x次方程的展开式。于是她拿起笔和纸,开始耐心地展开每一项。首先,她展开了一元x次方程中的常数项,接着展开了一次项、二次项、三次项……,最后将所有展开式合并起来,得到了一元x次方程的展开式。小悦看着自己长期努力得来的成果,激动得热泪盈眶。

她无法掩饰内心的喜悦,兴奋地在湖边跳跃着。湖面上的波纹在阳光的照射下闪着金光,似乎在为她的成功欢呼。那一刻,小悦觉得自己仿佛成为了湖水的一部分,与周围的环境融为一体。

随着时间的推移,小悦在岛上的生活也变得更加丰富多彩。她开始尝试将数学知识应用到日常生活中,在烹饪时运用几何学来切蛋糕,或者在散步时用代数知识来计算最短路径问题。这些小小的尝试让小悦意识到,知识不仅仅是为了考试和学术,它更是一种工具,可以帮助她更好地生活。

这个美丽的湖心小岛成为了小悦成长的见证。她在知识的海洋中探索,用数学来解读自然界的奥秘。清晨的阳光照耀在她的书桌上,给她带来温暖和勇气。傍晚时分,当夕阳洒在湖面上,小悦坐在窗前,静静地看着湖面的金辉渐渐消失在暮色中。


小悦面临的一元多次方程的展开式问题如下,她是如何处理呢:

输入一个带有一个单字符变量的表达式,并将其展开。表达式的形式为(ax+b)^n,其中a和b是整数,可以是正的,也可以是负的,x是任何单字符变量,n是自然数。如果a=1,则变量前面不会放置任何系数。如果a=-1,则变量前面将放一个“-”。

展开后的表达式应以字符串形式返回,格式为ax^b+cx^d+ex^f。。。其中a、c和e是项的系数,x是原始表达式中传递的原始一个字符变量,b、d和f是每个项中x的幂,并且是递减的。

如果项的系数为零,则不应包括该项。如果一个项的系数为1,则不应包括该系数。如果项的系数为-1,则只应包含“-”。如果项的幂为0,则只应包括系数。如果项的幂为1,则应排除插入符号和幂。

示例:

EdmSolution.Expand("(x+1)^2"); // returns "x^2+2x+1"
EdmSolution.Expand("(p-1)^3"); // returns "p^3-3p^2+3p-1"
EdmSolution.Expand("(2f+4)^6"); // returns "64f^6+768f^5+3840f^4+10240f^3+15360f^2+12288f+4096"
EdmSolution.Expand("(-2a-4)^0"); // returns "1"
EdmSolution.Expand("(-12t+43)^2"); // returns "144t^2-1032t+1849"
EdmSolution.Expand("(r+0)^203"); // returns "r^203"
EdmSolution.Expand("(-x-1)^2"); // returns "x^2+2x+1"


算法实现:

 1 public class EdmSolution
 2 {
 3     // 定义一个只读的静态正则表达式对象,用于匹配表达式的模式
 4     private readonly static Regex pattern = new Regex(@"^\((-?\d*)(.)([-+]\d+)\)\^(\d+)$", RegexOptions.Compiled);
 5   
 6     // 定义一个静态方法,用于展开给定的表达式
 7     public static string Expand(string expr)  
 8     {
 9         // 使用正则表达式匹配给定的表达式,并将匹配结果转换为字符串数组
10         var matches = pattern.Matches(expr).Cast<Match>().First().Groups.Cast<Group>().Skip(1).Select(g => g.Value).ToArray();
11         
12         // 解析匹配结果中的各个分组,并赋值给对应的变量
13         var a = matches[0].Length == 0 ? 1 : matches[0] == "-" ? -1 : int.Parse(matches[0]);
14         var x = matches[1];
15         var b = int.Parse(matches[2]);
16         var n = int.Parse(matches[3]);
17         
18         // 计算系数f的初始值,使用BigInteger类处理大整数
19         var f = new BigInteger(Math.Pow(a, n));
20         
21         // 根据系数f的值确定常数c的值
22         var c = f == -1 ? "-" : f == 1 ? "" : f.ToString();
23       
24         // 处理特殊情况:指数为0或常数为0的情况
25         if (n == 0) return "1";
26         if (b == 0) return $"{c}{x}{(n > 1) ? "^" : ""}{n}";
27         
28         // 创建一个StringBuilder对象,用于存储展开后的表达式
29         var res = new StringBuilder();
30       
31         // 循环展开表达式的每一项
32         for (var i = 0; i <= n; i++) 
33         {
34             // 根据系数f的符号和当前项的位置,添加"+"或"-"符号
35             if (f > 0 && i > 0) res.Append("+");
36             if (f < 0) res.Append("-");
37             
38             // 添加系数的绝对值,如果系数大于1或当前项不是第一项
39             if (i > 0 || f * f > 1) res.Append($"{BigInteger.Abs(f)}");
40             
41             // 添加变量x,如果当前项不是最后一项
42             if (i < n) res.Append(x);
43             
44             // 添加指数符号和指数值,如果当前项不是倒数第二项
45             if (i < n - 1) res.Append($"^{n - i}");
46             
47             // 更新系数f的值
48             f = f * (n - i) * b / a / (i + 1);
49         }
50       
51         // 将StringBuilder对象转换为字符串,并返回展开后的表达式
52         return res.ToString();
53     }
54 }

算法运行步骤:EdmSolution.Expand("(-5m+3)^4")

1. 匹配表达式:(-5m+3)^4
2. 使用正则表达式匹配给定的表达式,得到匹配结果:
- matches[0] = "-5"
- matches[1] = "m"
- matches[2] = "+3"
- matches[3] = "4"
3. 解析匹配结果中的各个分组:
- a = -5
- x = "m"
- b = 3
- n = 4
4. 计算系数f的初始值:f = (-5)^4 = 625
5. 根据系数f的值确定常数c的值:c = ""
6. 检查特殊情况:n = 4,不为0;b = 3,不为0
7. 创建StringBuilder对象res,用于存储展开后的表达式
8. 开始循环展开表达式的每一项:
- 第一项:i = 0
- f > 0,不添加"+"符号
- f * f > 1,添加系数的绝对值:625
- i < n,添加变量x:"m"
- i < n - 1,添加指数符号和指数值:"^4"
- 更新系数f的值:f = 625 * (4 - 0) * 3 / -5 / (0 + 1) = -1500
- 第二项:i = 1
- f < 0,添加"-"符号
- f * f > 1,添加系数的绝对值:1500
- i < n,添加变量x:"m"
- i < n - 1,添加指数符号和指数值:"^3"
- 更新系数f的值:f = -1500 * (4 - 1) * 3 / -5 / (1 + 1) = 1350
- 第三项:i = 2
- f < 0,添加"-"符号
- f * f > 1,添加系数的绝对值:1350
- i < n,添加变量x:"m"
- i < n - 1,添加指数符号和指数值:"^2"
- 更新系数f的值:f = 1350 * (4 - 2) * 3 / -5 / (2 + 1) = -540
- 第四项:i = 3
- f < 0,添加"-"符号
- f * f > 1,添加系数的绝对值:540
- i < n,添加变量x:"m"
- i < n - 1,不添加指数符号和指数值
- 更新系数f的值:f = 540 * (4 - 3) * 3 / -5 / (3 + 1) = 81
- 第五项:i = 4
- f < 0,添加"-"符号
- f * f > 1,添加系数的绝对值:81
- i < n,不添加变量x
- i < n - 1,不添加指数符号和指数值
- 更新系数f的值:f = 81 * (4 - 4) * 3 / -5 / (4 + 1) = 0
9. 循环结束,返回StringBuilder对象res转换后的字符串:"625m^4-1500m^3+1350m^2-540m+81"
10. 断言结果与期望值相等,测试通过


测试用例:

  1 namespace Solution
  2 {
  3     using NUnit.Framework;
  4     using System;
  5     using System.Collections.Generic;
  6     using System.Text;
  7     using System.Text.RegularExpressions;
  8 
  9     [TestFixture]
 10     public class SolutionTest
 11     {
 12         [Test]
 13         public void testBPositive()
 14         {
 15             Assert.AreEqual("1", EdmSolution.Expand("(x+1)^0"));
 16             Assert.AreEqual("x+1", EdmSolution.Expand("(x+1)^1"));
 17             Assert.AreEqual("x^2+2x+1", EdmSolution.Expand("(x+1)^2"));
 18             Assert.AreEqual("x^3+3x^2+3x+1", EdmSolution.Expand("(x+1)^3"));
 19             Assert.AreEqual("x^4+4x^3+6x^2+4x+1", EdmSolution.Expand("(x+1)^4"));
 20             Assert.AreEqual("x^5+5x^4+10x^3+10x^2+5x+1", EdmSolution.Expand("(x+1)^5"));
 21             Assert.AreEqual("1", EdmSolution.Expand("(x+2)^0"));
 22             Assert.AreEqual("x+2", EdmSolution.Expand("(x+2)^1"));
 23             Assert.AreEqual("x^2+4x+4", EdmSolution.Expand("(x+2)^2"));
 24             Assert.AreEqual("x^3+6x^2+12x+8", EdmSolution.Expand("(x+2)^3"));
 25             Assert.AreEqual("x^4+8x^3+24x^2+32x+16", EdmSolution.Expand("(x+2)^4"));
 26             Assert.AreEqual("x^5+10x^4+40x^3+80x^2+80x+32", EdmSolution.Expand("(x+2)^5"));
 27             Assert.AreEqual("t^5+10t^4+40t^3+80t^2+80t+32", EdmSolution.Expand("(t+2)^5"));
 28             Assert.AreEqual("y^15+75y^14+2625y^13+56875y^12+853125y^11+9384375y^10+78203125y^9+502734375y^8+2513671875y^7+9775390625y^6+29326171875y^5+66650390625y^4+111083984375y^3+128173828125y^2+91552734375y+30517578125", EdmSolution.Expand("(y+5)^15"));
 29         }
 30 
 31         [Test]
 32         public void testBNegative()
 33         {
 34             Assert.AreEqual("1", EdmSolution.Expand("(x-1)^0"));
 35             Assert.AreEqual("x-1", EdmSolution.Expand("(x-1)^1"));
 36             Assert.AreEqual("x^2-2x+1", EdmSolution.Expand("(x-1)^2"));
 37             Assert.AreEqual("x^3-3x^2+3x-1", EdmSolution.Expand("(x-1)^3"));
 38             Assert.AreEqual("x^4-4x^3+6x^2-4x+1", EdmSolution.Expand("(x-1)^4"));
 39             Assert.AreEqual("x^5-5x^4+10x^3-10x^2+5x-1", EdmSolution.Expand("(x-1)^5"));
 40             Assert.AreEqual("1", EdmSolution.Expand("(x-2)^0"));
 41             Assert.AreEqual("x-2", EdmSolution.Expand("(x-2)^1"));
 42             Assert.AreEqual("x^2-4x+4", EdmSolution.Expand("(x-2)^2"));
 43             Assert.AreEqual("x^3-6x^2+12x-8", EdmSolution.Expand("(x-2)^3"));
 44             Assert.AreEqual("x^4-8x^3+24x^2-32x+16", EdmSolution.Expand("(x-2)^4"));
 45             Assert.AreEqual("x^5-10x^4+40x^3-80x^2+80x-32", EdmSolution.Expand("(x-2)^5"));
 46             Assert.AreEqual("t^5-10t^4+40t^3-80t^2+80t-32", EdmSolution.Expand("(t-2)^5"));
 47             Assert.AreEqual("y^15-75y^14+2625y^13-56875y^12+853125y^11-9384375y^10+78203125y^9-502734375y^8+2513671875y^7-9775390625y^6+29326171875y^5-66650390625y^4+111083984375y^3-128173828125y^2+91552734375y-30517578125", EdmSolution.Expand("(y-5)^15"));
 48         }
 49 
 50         [Test]
 51         public void testAPositive()
 52         {
 53             Assert.AreEqual("625m^4+1500m^3+1350m^2+540m+81", EdmSolution.Expand("(5m+3)^4"));
 54             Assert.AreEqual("8x^3-36x^2+54x-27", EdmSolution.Expand("(2x-3)^3"));
 55             Assert.AreEqual("1", EdmSolution.Expand("(7x-7)^0"));
 56             Assert.AreEqual("35831808a^7+20901888a^6+5225472a^5+725760a^4+60480a^3+3024a^2+84a+1", EdmSolution.Expand("(12a+1)^7"));
 57             Assert.AreEqual("184528125x^5-123018750x^4+32805000x^3-4374000x^2+291600x-7776", EdmSolution.Expand("(45x-6)^5"));
 58             Assert.AreEqual("12c+1", EdmSolution.Expand("(12c+1)^1"));
 59             Assert.AreEqual("100000000x^4-4000000x^3+60000x^2-400x+1", EdmSolution.Expand("(100x-1)^4"));
 60             Assert.AreEqual("1000x^3+2400x^2+1920x+512", EdmSolution.Expand("(10x+8)^3"));
 61             Assert.AreEqual("128x^7-448x^6+672x^5-560x^4+280x^3-84x^2+14x-1", EdmSolution.Expand("(2x-1)^7"));
 62             Assert.AreEqual("81t^2", EdmSolution.Expand("(9t-0)^2"));
 63         }
 64 
 65         [Test]
 66         public void testANegative()
 67         {
 68             Assert.AreEqual("625m^4-1500m^3+1350m^2-540m+81", EdmSolution.Expand("(-5m+3)^4"));
 69             Assert.AreEqual("-8k^3-36k^2-54k-27", EdmSolution.Expand("(-2k-3)^3"));
 70             Assert.AreEqual("1", EdmSolution.Expand("(-7x-7)^0"));
 71             Assert.AreEqual("-35831808a^7+20901888a^6-5225472a^5+725760a^4-60480a^3+3024a^2-84a+1", EdmSolution.Expand("(-12a+1)^7"));
 72             Assert.AreEqual("-184528125k^5-123018750k^4-32805000k^3-4374000k^2-291600k-7776", EdmSolution.Expand("(-45k-6)^5"));
 73             Assert.AreEqual("-12c+1", EdmSolution.Expand("(-12c+1)^1"));
 74             Assert.AreEqual("100000000x^4+4000000x^3+60000x^2+400x+1", EdmSolution.Expand("(-100x-1)^4"));
 75             Assert.AreEqual("-1000x^3+2400x^2-1920x+512", EdmSolution.Expand("(-10x+8)^3"));
 76             Assert.AreEqual("-128w^7-448w^6-672w^5-560w^4-280w^3-84w^2-14w-1", EdmSolution.Expand("(-2w-1)^7"));
 77             Assert.AreEqual("-n^5-60n^4-1440n^3-17280n^2-103680n-248832", EdmSolution.Expand("(-n-12)^5"));//extra static test added by docgunthrop
 78             Assert.AreEqual("-k^7+28k^6-336k^5+2240k^4-8960k^3+21504k^2-28672k+16384", EdmSolution.Expand("(-k+4)^7"));//extra static test added by docgunthrop
 79             Assert.AreEqual("81t^2", EdmSolution.Expand("(-9t-0)^2"));
 80         }
 81 
 82         private static readonly Random rand = new Random();
 83         private static int rands(int limit)
 84         {
 85             return rand.Next(2 * limit + 2) - limit;
 86         }
 87 
 88         private static string makeTestCase(int c, int n, int p)
 89         {
 90             int coeff = 0;
 91             while (coeff == 0)
 92                 coeff = rands(c);
 93             return string.Format("({0}{1}{2:+0;-#})^{3}", coeff == 1 ? "" : (coeff == -1 ? "-" : "" + coeff), (char)('a' + rand.Next(26)), rands(n), rand.Next(p) + 2);
 94         }
 95 
 96         [Test]
 97         public void testRandom()
 98         {
 99 
100             for (int i = 0; i < 50; ++i)
101             {
102                 string eq = makeTestCase(16, 32, 4);
103                 Assert.AreEqual(ReferenceSolution.Expand(eq), EdmSolution.Expand(eq), "Input: " + eq);
104             }
105 
106             for (int i = 0; i < 100; ++i)
107             {
108                 string eq = makeTestCase(9, 16, 9);
109                 Assert.AreEqual(ReferenceSolution.Expand(eq), EdmSolution.Expand(eq), "Input: " + eq);
110             }
111         }
112 
113         #region Reference solution
114         private class ReferenceSolution
115         {
116 
117             private static readonly Regex re = new Regex(@"\((-?\d*)([a-z])([\+\-]\d+)\)\^(\d+)");
118 
119             public static string Expand(string expr)
120             {
121 
122                 Match m = re.Match(expr);
123 
124                 string sa = m.Groups[1].Value;
125                 int a = ("".Equals(sa) ? 1 : ("-".Equals(sa) ? -1 : int.Parse(sa)));
126 
127                 string x = m.Groups[2].Value;
128 
129                 string sb = m.Groups[3].Value;
130                 int b = "".Equals(sb) ? 0 : int.Parse(sb);
131 
132                 string se = m.Groups[4].Value;
133                 int exp = "".Equals(se) ? 1 : int.Parse(se);
134                 if (exp == 0)
135                     return "1";
136 
137                 if (exp == 1)
138                     return sa + x + sb;
139 
140                 if (b == 0)
141                 {
142                     long coeff = (long)Math.Pow(a, exp);
143                     return (coeff == 1 ? "" : (coeff == -1 ? "-" : coeff.ToString())) + x + "^" + exp;
144                 }
145 
146                 List<long> binoms = new List<long>();
147                 for (int i = 0; i <= exp; ++i)
148                     binoms.Add(nk(exp, i));
149 
150                 long coeff1 = (long)Math.Pow(a, exp);
151                 StringBuilder terms = new StringBuilder();
152                 for (int i = exp; i >= 0; --i)
153                 {
154 
155                     long coeff = coeff1 * binoms[i];
156 
157                     if (i != exp && coeff > 0)
158                         terms.Append('+');
159 
160                     if (coeff < 0)
161                         terms.Append('-');
162 
163                     if ((coeff != 1 && coeff != -1) || i == 0)
164                         terms.Append(coeff > 0 ? coeff : -coeff);
165 
166                     if (i > 0)
167                         terms.Append(x);
168 
169                     if (i > 1)
170                         terms.Append("^" + i);
171 
172                     coeff1 = coeff1 / a * b;
173                 }
174 
175                 return terms.ToString();
176             }
177 
178             private static readonly List<List<long>> nka = new List<List<long>>();
179 
180             private static long nk(int n, int k)
181             {
182 
183                 if (n == 0 || k == 0)
184                     return 1;
185 
186                 if (k == 1)
187                     return n;
188 
189                 if (n - k < k)
190                     return nk(n, n - k);
191 
192                 for (int i = nka.Count; i <= n; ++i)
193                     nka.Add(new List<long>());
194 
195                 List<long> ns = nka[n];
196                 for (int i = ns.Count; i <= k; ++i)
197                     ns.Add(0L);
198 
199                 if (ns[k] != 0)
200                     return ns[k];
201                 else
202                 {
203                     long b = nk(n - 1, k - 1) + nk(n - 1, k);
204                     ns[k] = b;
205                     return b;
206                 }
207             }
208         }
209         #endregion
210     }
211 }

 

与【算法】湖心岛上的数学梦--用c#实现一元多次方程的展开式相似的内容:

【算法】湖心岛上的数学梦--用c#实现一元多次方程的展开式

每天清晨,当第一缕阳光洒在湖面上,一个身影便会出现在湖心小岛上。她坐在一块大石头上,周围被茂盛的植物环绕,安静地沉浸在数学的世界中。 这个姑娘叫小悦,她的故事在这个美丽的湖心小岛上展开。每天早晨,她都会提前来到湖边,仔细观察水下的植物,然后抽出时间来钻研一元x次方程。她身上的气息混合着湖水的清新和植

华为云MRS支持lakeformation能力,打造一站式湖仓,释放数据价值

摘要:对云端用户而言,业务价值发现是最重要的,华为MRS支持LakeFormation后,成功降低了数据应用的成本,帮助客户落地“存”与“算”的管理,加快推进了数智融合进程,更大程度地释放业务数据价值。 本文分享自华为云社区《华为云MRS支持lakeformation能力,打造一站式湖仓,释放数据价

OI-Wiki 学习笔记

算法基础 \(\text{Update: 2024 - 07 - 22}\) 复杂度 定义 衡量一个算法的快慢,一定要考虑数据规模的大小。 一般来说,数据规模越大,算法的用时就越长。 而在算法竞赛中,我们衡量一个算法的效率时,最重要的不是看它在某个数据规模下的用时,而是看它的用时随数据规模而增长的趋

算法金 | 这绝对是不一样的,独一无二的逻辑回归算法体验

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 今日 220+/10000 在 回归求助 & 送教程这篇文章中,我放出来最近在做的揭榜挂帅的 PPT 初稿,很多读者表示感兴趣,还有小伙伴问啥时候出书,更有同学贴心的给对象要了份PPT(

算法金 | 秒懂 AI - 深度学习五大模型:RNN、CNN、Transformer、BERT、GPT 简介

1. RNN(Recurrent Neural Network) 时间轴 1986年,RNN 模型首次由 David Rumelhart 等人提出,旨在处理序列数据。 关键技术 循环结构 序列处理 长短时记忆网络(LSTM)和门控循环单元(GRU) 核心原理 RNN 通过循环结构让网络记住以前的输入

算法金 | 深度学习图像增强方法总结

图像增强方法在数字图像处理中占有重要地位,它能够有效提高图像的视觉效果,增强图像的细节信息,从而在医学、遥感、工业检测等多个领域发挥重要作用 1. 空间域增强方法 空间域增强方法是通过直接对图像像素进行操作来实现图像增强的技术。以下是几种常见的空间域增强方法: 1.1 直方图均衡化 直方图均衡化是一

算法金 | 来了,pandas 2.0

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 今日 210+/10000,内含 Pandas 是一个强大的数据分析库,广泛应用于科学研究、金融分析、商业智能等领域。它提供了高效的数据结构和数据分析工具,使得处理和分析数据变得更加简单

算法金 | DL 骚操作扫盲,神经网络设计与选择、参数初始化与优化、学习率调整与正则化、Loss Function、Bad Gradient

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 今日 216/10000 抱个拳,送个礼 神经网络设计与选择 参数初始化与优化 学习率调整与正则化 数据预处理与标准化 训练过程与监控 特定模型技巧 其他训练技巧 1. 神经网络设计与选

算法金 | 最难的来了:超参数网格搜索、贝叶斯优化、遗传算法、模型特异化、Hyperopt、Optuna、多目标优化、异步并行优化

​ 大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 今日 215/10000 为模型找到最好的超参数是机器学习实践中最困难的部分之一 1. 超参数调优的基本概念 机器学习模型中的参数通常分为两类:模型参数和超参数。模型参数是模型通过训

算法金 | 时间序列预测真的需要深度学习模型吗?是的,我需要。不,你不需要?

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 参考 论文:https://arxiv.org/abs/2101.02118 更多内容,见微*公号往期文章: 审稿人:拜托,请把模型时间序列去趋势!! 使用 Python 快速上手 LS