Hi,我是Johngo~
看到一则消息,挺震惊的,脱离我们现有的认识,虽这种情况一直有。但是目前看来被大家重中之重的提上了日程。
你没看错,就是 “防御性编程”!
前一段时间,闹得沸沸扬扬的阿里、腾讯、滴滴,纷纷出现宕机的情况,也被咱们所有的 coder 笑称“降本增笑”!
也就在这两年,在职的同学担心哪一天被裁,找工作的同学期盼着哪一天能拿到一个合理的offer。
很多公司裁员的策略也的确出现了一些问题。
比如说,很多公司对中层下手,也就是这帮维护着整个的项目,维护着所有的落地的代码的人。
也就是这批人,薪资高、待的时间久,就把这一波人裁员了,的的确确降本了。
直接带来的后果就是,高层无法维护线上的代码,初级程序员搞不定,问题就来了。
反正就是,把最能coding的人裁掉了,不出现问题才怪!
像这样的,都在代码留一手,大家怎么看?
我们在大学课堂上,以及刚刚毕业那会儿,听到的都是:
一定要:确保代码的可读性、可维护性、可扩展性和安全性!
比如说:
等等等等。。。。
结果目前的状况就是保全自己,故意写的很烂,故意写的不可维护,提高自己在公司岗位上的“不可替代性”。
这就叫“技术壁垒” ??!
有人说,防御性编程坑的只有接手的人,资本家才不会管这些。
也有人说,对于高手,什么屎山没见过,什么烂代码没维护过,根本不是事儿,只是费事儿~
总归我觉得吧,不反对,但也不提倡!!记得去评论区参与~
还是那个初心:不断提高自身能力,无论是coding,还是业务!提高自身防御力,此处不留爷,自有留爷处。
说了这么多,再说一些技术方面的事情。
最近已经分享了很多关于机器学习和深度学习的内容,大家可以点击文末链接进行查看。
同时这里分享一个面试题,大家可以查缺补漏,给出自己的见解。
最近后台有同学问:为什么SVM在高维数据上表现得较好?
你好,咱们来说说你的这个问题。
SVM在高维数据上表现较好的原因,其实可以从5个方面来解释。
1. 维度的诅咒:
在低维空间中,数据点之间的距离相对较小,容易造成类别之间的混淆。而在高维空间中,数据点之间的距离相对较大,这有助于更好地分离不同的类别。这是因为随着维度的增加,数据在空间中变得更加分散,使得样本之间更容易分开。
2. 核技巧(Kernel Trick):
SVM通过核技巧将低维空间中的非线性问题映射到高维空间中的线性问题。在高维空间中,原本非线性可分的数据在某种变换下可能变得线性可分。这种映射通过核函数来实现,常见的核函数包括线性核、多项式核和径向基函数(RBF)核。
3. 间隔最大化(Maximal Margin):
SVM的目标是找到一个能够最大化不同类别之间间隔的超平面。在高维空间中,样本点更容易被超平面分开,并且最大间隔的超平面对于新的数据点的泛化能力更强。
4. 鲁棒性(Robustness):
在高维空间中,SVM对于噪声和异常点的影响相对较小。这是因为在高维空间中,异常点的影响更容易被稀释,不容易对整体的决策边界产生显著的影响。
5. 维度的增加提供更多信息:
随着维度的增加,数据中包含的信息也相应增加。这使得在高维空间中更容易发现和利用数据的内在结构,从而更好地进行分类。
下面咱们使用sklearn来写一段Python代码,同时使用了一个二维数据集和一个径向基函数(RBF)核:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
# 生成一个二维数据集
np.random.seed(0)
X = np.random.randn(300, 2)
y = np.logical_xor(X[:, 0] > 0, X[:, 1] > 0)
# 使用径向基函数(RBF)核的SVM进行分类
clf = svm.SVC(kernel='rbf', gamma=1)
clf.fit(X, y)
# 绘制决策边界
h = .02
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.coolwarm, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.coolwarm)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('SVM with RBF Kernel')
plt.show()
上面代码可以看到SVM在高维数据上的表现,同时说明了如何通过核函数进行非线性映射。
有任何问题和见解,欢迎评论区给出~
我是Johngo下期见~