知识点
-
SVR
- 参考
- 支持向量机(SVM)是一种分类算法,但是也可以做回归,根据输入的数据不同可做不同的模型(若输入标签为连续值则做回归,若输入标签为分类值则用SVC做分类)
- 对于SVM算法,我们首先导入sklearn.svm中的SVR模块。SVR()就是SVM算法来做回归用的方法(即输入标签是连续值的时候要用的方法),通过以下语句来确定SVR的模式:
from sklearn.svm import SVR svr = SVR(kernel=’rbf’, C=1e3, gamma=0.01)
- kernal:核函数类型。一般常用的有‘rbf’,‘linear’,‘poly’,等,发现使用‘rbf’参数时函数模型的拟合效果最好,其他拟合都是线性拟合。
- C:惩罚因子。C表征你有多么重视离群点,C越大越重视,越不想丢掉它们。C值大时对误差分类的惩罚增大,C值小时对误差分类的惩罚减小。当C越大,趋近无穷的时候,表示不允许分类误差的存在,margin越小,容易过拟合;当C趋于0时,表示我们不再关注分类是否正确,只要求margin越大,容易欠拟合。
- gamma:是’rbf’,’poly’和’sigmoid’的核系数且gamma的值必须大于0。随着gamma的增大,存在对于测试集分类效果差而对训练分类效果好的情况,并且容易泛化误差出现过拟合。
-
时间序列分析的评价指标
- 均方误差(MSE)
1 m ∑ i = 1 m ( y i − y i ^ ) 2 \frac{1}{m}\sum_{i=1}^{m}(y_i - \hat{y_i})^2 m1i=1∑m(yi−yi^)2
其中 y i y_i yi 是真实值, y i ^ \hat{y_i} yi^ 是预测值 - 均方根误差(RMSE)
1 m ∑ i = 1 m ( y i − y i ^ ) 2 \sqrt{\frac{1}{m}\sum_{i=1}^{m}(y_i - \hat{y_i})^2} m1i=1∑m(yi−yi^)2
均方根误差就是均方误差开方,使误差的量级和原数据一致,使数据更好描述 - 平均绝对误差(MAE)
1 m ∑ i = 1 m ∣ y i − y i ^ ∣ \frac{1}{m}\sum_{i=1}^{m}\lvert y_i - \hat{y_i}\rvert m1i=1∑m∣yi−yi^∣ - 对称平均绝对百分误差(SMAPE)
100 % n ∑ i = 1 n ∣ y i − y ^ i ∣ ( ∣ y i ∣ + ∣ y ^ i ∣ ) / 2 \frac{100\%}{n} \sum_{i=1}^n \frac{\lvert y_i - \hat{y}_i \rvert}{(\lvert y_i \rvert + \lvert \hat{y}_i \rvert)/2} n100%i=1∑n(∣yi∣+∣y^i∣)/2∣yi−y^i∣
- 均方误差(MSE)
-
数据标准化
[In]: import numpy as np from sklearn.preprocessing import MinMaxScaler # 用最大最小值标准化 scaler = MinMaxScaler(feature_range=(0, 1)) arr = np.array([1,2,3,4,5,6,7]) # 讲arr变形为[[1][2][3][4][5][6][7]],因为fit_transform需要2维输入 arr = arr.reshape(-1, 1) print(arr) # fit_transform(arr)将arr实现标准化 dataset = scaler.fit_transform(arr) # ravel()的作用是将n维矩阵降为1维 dataset = dataset.ravel() print(dataset) [Out]: [[1] [2] [3] [4] [5] [6] [7]] [0. 0.16666667 0.33333333 0.5 0.66666667 0.83333333 1. ]