如果不想你被称做掉包侠,那么请有效地学习机器学习算法知识

机器学习远远超出了sklearn中简单的fit和predict方法。

 

背景:

现在大家都习惯说掉包侠这个词,尤其是人工智能领域。我的一个朋友就嘲笑我,说:“你这么久学会了什么?只是几个模型,我一周就学会了。” 那是他的原话。我只是对他微笑,并询问他学到了什么。他告诉了几种机器学习算法的名称。我问他确切地学到了什么,然后得出了使用Sklearn的拟合(fit)和预测(predict)方法的明显答复,并简要概述了该算法的工作原理。

我脸上露出邪恶的笑容,我问他要如何获得最佳参数?模型如何学习最佳权重?当我们有低延迟要求时我们该怎么办?尽管这些问题并不复杂,但他坐在那里静静地看着我的脸,我笑到了最后。

从故事中得出的结论是,机器学习远远超出了简单的拟合和预测方法。

我们大多数人只是在bi站上观看了一些视频,并声称我们了解机器学习,只是很快就意识到了我们的错误。对于所有自学的人来说, 请记住,有成千上万的人像您和我一样学习机器学习/数据科学。请记住,我们将与拥有硕士/博士学位的人竞争。在与数据科学相关的领域。因此,要与他们竞争,我们必须在基础方面真正扎实。

围绕机器学习的话题很多,新的课程每天都在涌现,目前有比实际工作更多的课程。拥有如此庞大的资源,就出现了选择正确路线的难题。

坦白地说,这些课程大多数都是平庸的(比如某些营销号中的广告),因此不会深入探讨。嗯,那里没有好课程,但是每门课程都提供不同的课程。很少涉及数学部分,很少擅长于写代码部分等等。因此,今天我不会特别提及任何课程。我将分享我在故事中向同一个朋友提出并建议的方法。我相信它也可以帮助您进行数据科学之旅。


 

在我们进入算法部分之前,让我告诉您在机器学习项目中确切地在哪里使用它们。完成机器学习项目涉及多个阶段,每个阶段都同样重要。

 

 

建模 是我们的机器学习算法进入的阶段,它只是机器学习生命周期中的重要阶段之一。

好吧,让我们深入研究机器学习算法的主要主题。

对于每种算法,我们需要注意一些重要的事情。





1.算法的背后的思想(或者说内涵)是什么?

最初,我曾经学习过一种算法,并且过了一段时间就忘记了,每当我回来修改它时,我都会发现很难理解当时我已经学到的算法。随着时间的流逝,我意识到,如果人类太过理论化,我们将无法真正记住它们;如果通过可视化来学习它,我们很可能会长时间记住它。这就是几何帮助我们以最简单的方式可视化算法核心的地方。如果我们对这些算法有一些很酷的现实生活例子,那么我们更倾向于更深入地理解它。

一旦从任意选择的课程中学习了算法,就打开一个新选项卡,然后开始搜索该算法的相关内容。相信我,互联网上有很多很酷的解释。对于初学者来说,CSDN和知乎是最好的起点。

 

2.算法如何工作?

一旦了解了它的直觉,请尝试一下并尝试观察算法的实际工作原理。您需要检查的另一件事是该算法如何处理各种形式的数据,例如文本/类别/数字。

在此阶段中,尝试多种因素并查看算法的工作原理,您可以参考Scikit-Learn提供的现有算法。检查算法的参数,然后尝试使用它们,看看它们如何影响模型的性能。

 

3.在哪里可以使用/在哪里不能使用?

这是大多数人经常错过的最重要因素,而他们更多地关注其作用和工作方式。深入了解该算法非常重要,它为何有效或为何无效。

尝试实验并了解它如何处理大型数据集和高维数据。如果容易出现异常值或数据集不平衡。

在面试中,最棘手的问题不是什么(what)和如何(who),而是为什么(why)。 假设明天您在学习算法后创建了一个个人项目,并且使用了特定的X算法来解决它,那么面试官最有可能问:为什么你要用X算法为什么不用Y算法?换句话说, 为什么您认为X算法比其他方法更有效?

好家伙!这就是为什么您应该知道它在哪里起作用以及在哪里不起作用的原因。

例如,您需要提出类似这样的答复:由于我们的数据是高维的,并且本质上是非线性的,因此由于种种原因,算法X倾向于比Y更好地处理非线性数据。

 

4.为什么算法的可解释性很重要

这是关键步骤之一,之所以如此重要,是因为作为数据科学家,您可能需要向可能完全没有技术知识的客户展示模型。在此期间,您可能需要说服他们他们的模型正在预测正确的结果,并且需要提供一些很好的理由让他们适应。您根本无法对它们施加准确性。如果您的算法是可解释的,那么您可以向他们展示模型预测的原因。可解释性只不过意味着算法的功能重要性。

例如:如果您正在从事医疗保健项目,则您的模型可以预测一个人的疾病为阳性/阴性。这是一个非常敏感的问题,他们无法承担可解释性出现时的错误。如果您的模型向您显示了(因为X特征(体内某些水平)大于x值之类的原因),作为积极/消极的人,这将变得更加容易和有意义。

 

5.为什么要学习算法的时间/空间复杂性?

当我们进行实时工作时,我们可能必须处理大量数据,并且如果需要低延迟,那么时空复杂度可以帮助您选择正确的算法。

如果您的模型占用更多内存,那么实时运行它会非常昂贵,尤其是当您使用云基础架构来运行模型时。有时,一些业务问题会带来较低的延迟要求,其中有些算法提供了较高的准确性,但由于其时间/空间复杂度的限制而无法满足要求。

百度,CSDN,博客园,知乎,简书是获取每种算法的所有这些相关信息的好资源。

 

6.为什么我们需要了解算法背后的数学原理?

再次提到数学?是的,是的,我明白了。即使不了解数学,我们也可以使用算法,只需从Sklearn这个库中导入即可,但是从长远来看,不建议这样做。(这就是很多人被称为掉包侠的原因,只会调用库函数)好吧,无论我们是否接受,我们绝对都需要数学以更好地了解汽车引擎盖下的实际情况。这可能会让一些人失望,但我得到一个好消息,我们无法避免使用数学运算,但可以简化它并避免进行严格的数学运算。

简而言之,大多数机器学习算法的工作是最小化实际输出与预测输出之间的差异(LOSS)

算法=最小化(损失)+正则项

例如,我们应该将逻辑回归的对数损失和SVM等的Hinge损失最小化。

注意:并非每种机器学习算法都如此,这仅适用于少数算法。

为了最大程度地减少这种损失,这些算法在内部使用了诸如梯度下降、牛顿法拟牛顿法等等其他最优化理论。因此,如果您对自己数学不太满意,那么只需尝试了解每种算法的损失函数及其梯度下降,就可以避免所有其他严格的数学运算并保持目标不变。一旦感到自己数学还OK,您就可以深入研究更多的数学知识。

 

7.为什么从头开始实施(可选):

如果假设您正在学习吉他,则首先要从基础开始,然后慢慢尝试复制别人已经创作的音乐,在此阶段,如果您了解他们如何创作音乐和进行调音,则可以下一步就是创建自己的音乐了吗?

同样,通过从头复制现有算法来实现它们,我们可以更清楚地了解现有算法。您将学到一些重要的知识点,可以帮助您将来建立更好的模型。请记住,由于某些问题,我们可能无法始终在我们的项目中使用Sklearn中算法的版本。在这种情况下,您必须准备以满足您要求的方式优化或修改算法。

这说起来容易做起来难,但是要花很多时间才能达到这一点,这就是为什么我将此标记为可选。至少尝试实现一种算法以了解其实际工作原理。如果您发现很难编写代码,请将算法分解为多个部分,然后先编写伪代码,然后再尝试将其转换为实际代码。(用面向对象的思想去解决问题,把每个部分当做一个函数或方法看待)



结论:

不要着急,花费自己的时间并尽可能最好地学习它,而不是学习一半然后每次都多次引用它。请记住,目标不是完美,而是坚实的基础,请相信我,我们永远无法完善目标,总是每天都会变得更好。如果您能理解算法的要旨并了解算法的工作原理,那么从长远来看,将来的你一定感谢现在努力的自己。(有点像鸡汤hhh)

在此过程中,如果您听不懂或被卡住,请将其放在一边,然后继续进行其他主题。不要只是坚持下去,浪费您宝贵的时间。稍后以崭新的心态返回并再次检查,请相信我,您会感到惊讶。如果您仍然无法理解某些内容,请搜索其他资源以更轻松的方式对其进行解释。

最后一步,将您所有的学习应用于不同数据类型和大小的多个数据集以获得真正的学习,实践就是一切。通过做这些事情,您将学到很多东西,而不是简单的阅读,所以请准备好动手。

如果您读了那么多书,您肯定有学习机器学习的热情,这是学习任何技能的最重要因素。不断学习,不要放弃。



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,根据您的要求,我用中文回答。 判断一个字符串是否为回文串,需要将这个字符串正向和反向地比较,看它们是否完全相同。如果相同,则这个字符串是回文串,否则不是。 以下是一个示例Python代码,用于判断一个字符串是否为回文串: ``` def is_palindrome(s): return s == s[::-1] # 测试代码 s = input("输入一个字符串:") if is_palindrome(s): print("这个字符串是回文串") else: print("这个字符串不是回文串") ``` 代码中的 is_palindrome() 函数接收一个字符串 s,使用 Python 的切片(slice)操作 s[::-1] 反转这个字符串,然后将反转后的字符串与原始字符串 s 进行比较,判断是否相同。如果相同,返回 True,否则返回 False。 希望这个回答对您有所帮助! ### 回答2: 回文串是指正向看和反向看完全相同的字符串,例如t,abba,xyzyx都是回文串。如果一个字符串正向和反向是等价的,那么它就是回文串。 判断一个字符串是否是回文串,需要将其正向和反向比较是否相同。可以使用双指针来实现这个过程,即分别从字符串的开头和结尾开始比较字符,如果相同则继续向中间移动指针,如果不同则说明不是回文串。 在实现时,可以先将字符串反转,然后和原字符串进行比较。如果比较结果相同则说明是回文串,否则不是回文串。具体实现如下: ``` #include <iostream> #include <string> #include <algorithm> // 包含 reverse 函数 using namespace std; int main() { string s; // 定义字符串 s cin >> s; // 输入字符串 s string r = s; // 将 s 复制到 r 中 reverse(r.begin(), r.end()); // 反转 r if (s == r) // 比较 s 和 r 是否相同 cout << "Yes" << endl; // 如果相同则是回文串 else cout << "No" << endl; // 否则不是回文串 return 0; } ``` 上面的代码中,使用了 STL 中的 reverse 函数将字符串 r 反转,然后和原字符串 s 进行比较,如果相同则是回文串,否则不是回文串。 ### 回答3: 回文串是指从左到右读和从右到左读等价的字符串。我们可以通过比较字符串正向和反向的字符是否相同来判断一个字符串是否是回文串。 例如,对于字符串"abba",我们可以分别从左到右和从右到左遍历字符串的每个字符,发现它们是相等的,因此这个字符串是回文串。 那么,对于一个长度不超过60的字符串,我们只需要将字符串正向和反向遍历一遍,比较每个字符是否相同即可。如果一旦发现有字符不相同,就可以判断这个字符串不是回文串。如果正向遍历到字符串末尾都没有出现不相同的字符,那么这个字符串就是回文串。 下面给出一个Python的代码实现: ```python def is_palindromic(s): """ 判断字符串s是否是回文串 """ n = len(s) for i in range(n // 2): if s[i] != s[n - i - 1]: return False return True # 测试 print(is_palindromic("abba")) # True print(is_palindromic("abcba")) # True print(is_palindromic("hello")) # False ``` 在代码中,我们首先定义了一个`is_palindromic`函数,用于判断一个字符串是否是回文串。接着遍历字符串的前一半字符,如果发现有字符不相同,则返回`False`,表示这个字符串不是回文串;否则,遍历完整个字符串后返回`True`,表示这个字符串是回文串。 最后给出一些字符串的测试结果,可以看到只有"abba"和"abcba"是回文串,而"hello"不是回文串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值