1.0 SVM解决回归问题
SVM思想也可以解决回归问题。回归问题的本质就是找到一根能够很好地拟合数据点的线(直线、曲线)。但不同回归算法对于拟合好坏的定义不同,比如线性回归算法所定义的“好”拟合就是数据点到拟合直线的MSE最小。
而对于SVM算法来说,如何定义“拟合”呢:指定一个Margin值,在Margin区域的范围内,包含的数据点越多越好。这就表示这个Margin范围能够比较好地表达样本数据点,在这种情况下取中间的直线作为真正回归结果,用它来预测其他点的y值。
SVM解决回归问题的思路与解决分类问题的思路是相反的。在具体训练SVM解决回归问题时,需要指定Margin范围,这里就引入了一个超参数,即Margin的边界到中间直线的距离。
2.0 sklearn中SVM解决回归问题
from sklearn import datasets
from sklearn.model_selection import train_test_split
boston = datasets.load_boston()
X = boston.data
y = boston.target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)
from sklearn.svm import LinearSVR
from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
def StandardLinearSVR(epsilon=0.1):
return Pipeline([
("std_scaler", StandardScaler()),
("linearSVR", LinearSVR(epsilon=epsilon))
])
svr = StandardLinearSVR()
svr.fit(X_train, y_train)
svr.score(X_test, y_test) # 输出:0.6360871538697925
虽然模型分数不高,但实际上可以通过调节其他参数进一步提高。除了epsilon以外,还可以调节C;如果不使用线性分类器LinearSVR,还可以使用SVR包,可以添加kernel,可以调节更多参数。
3.0 SVM的优缺点
SVM算法是一个很优秀的算法,在集成学习和神经网络之类的算法没有表现出优越性能前,SVM基本占据了分类模型的统治地位。目前则是在大数据时代的大样本背景下,SVM由于其在大样本时超级大的计算量,热度有所下降,但是仍然是一个常用的机器学习算法。
SVM算法的主要优点:
1)解决高维特征的分类问题和回归问题很有效,在特征维度大于样本数时依然有很好的效果
2)仅仅使用一部分支持向量来做超平面的决策,无需依赖全部数据
3)有大量的核函数可以使用,从而可以很灵活的来解决各种非线性的分类回归问题
4)样本量不是海量数据的时候,分类准确率高,泛化能力强
SVM算法的主要缺点:
1)如果特征维度远远大于样本数,则SVM表现一般
2)SVM在样本量非常大,核函数映射维度非常高时,计算量过大,不太适合使用
3)非线性问题的核函数的选择没有通用标准,难以选择一个合适的核函数
4)SVM对缺失数据敏感