机器学习入门(二十三)——SVM(4)

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对缺失数据敏感

你可能感兴趣的:(机器学习入门(二十三)——SVM(4))