SVM支持向量機實例


波士頓房價回歸分析

1.導入波士頓房價數據集

#############################  svm實例--波士頓房價回歸分析 #######################################
#導入numpy
import numpy as np
#導入畫圖工具
import matplotlib.pyplot as plt
#導入波士頓房價數據集
from sklearn.datasets import load_boston
boston = load_boston()
#打印數據集中的鍵
print(boston.keys())

#打印數據集中的短描述
#print(boston['DESCR'])
dict_keys(['data', 'target', 'feature_names', 'DESCR', 'filename'])

2.使用SVR進行建模

#導入數據集拆分工具
from sklearn.model_selection import train_test_split
#建立訓練數據集和測試數據集
X,y = boston.data,boston.target
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=8)
print('\n\n\n')
print('代碼運行結果')
print('====================================\n')
#打印訓練集和測試集的形態
print(X_train.shape)
print(X_test.shape)
print('\n====================================')
print('\n\n\n')
代碼運行結果
====================================
(379, 13)
(127, 13)
====================================
#導入支持向量機回歸模型
from sklearn.svm import SVR
#分別測試linear核函數和rbf核函數
for kernel in ['linear','rbf']:
    svr = SVR(kernel = kernel,gamma = 'auto')
    svr.fit(X_train,y_train)
    print(kernel,'核函數的模型訓練集得分: {:.3f}'.format(svr.score(X_train,y_train)))
    print(kernel,'核函數的模型測試集得分: {:.3f}'.format(svr.score(X_test,y_test)))
linear 核函數的模型訓練集得分: 0.709
linear 核函數的模型測試集得分: 0.696
rbf 核函數的模型訓練集得分: 0.145
rbf 核函數的模型測試集得分: 0.001
#將特征數值中的最小值和最大值用散點畫出來
plt.plot(X.min(axis=0),'v',label='min')
plt.plot(X.max(axis=0),'^',label='max')
#設定縱坐標為對數形式
plt.yscale('log')
#設置圖注位置為最佳
plt.legend(loc='best')
#設定橫縱軸標題
plt.xlabel('features')
plt.ylabel('feature magnitude')
#顯示圖形
plt.show()

3.用StandardScaler進行數據預處理

#導入數據預處理工具
from sklearn.preprocessing import StandardScaler
#對訓練集和測試集進行數據預處理
scaler = StandardScaler()
scaler.fit(X_train)
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)

#將預處理后的數據特征最大值和最小值用散點圖表示出來

plt.plot(X_train_scaled.min(axis=0),'v',label='train set min')
plt.plot(X_train_scaled.max(axis=0),'^',label='train set max')
plt.plot(X_test_scaled.min(axis=0),'v',label='test set min')
plt.plot(X_test_scaled.max(axis=0),'^',label='test set max')

#設置圖注位置為最佳
plt.legend(loc='best')
#設定橫縱軸標題
plt.xlabel('scaled features')
plt.ylabel('scaled feature magnitude')
#顯示圖形
plt.show()

4.數據預處理后重新訓練模型

#用預處理后的數據重新訓練模型
for kernel in ['linear','rbf']:
    svr = SVR(kernel = kernel)
    svr.fit(X_train_scaled,y_train)
    print('數據預處理后',kernel,'核函數的模型訓練集得分: {:.3f}'.format(svr.score(X_train_scaled,y_train)))
    print('數據預處理后',kernel,'核函數的模型測試集得分: {:.3f}'.format(svr.score(X_test_scaled,y_test)))
數據預處理后 linear 核函數的模型訓練集得分: 0.706
數據預處理后 linear 核函數的模型測試集得分: 0.698
數據預處理后 rbf 核函數的模型訓練集得分: 0.665
數據預處理后 rbf 核函數的模型測試集得分: 0.695
#設置"rbf"內核的SVR模型的C參數和gamma參數
svr = SVR(C=100,gamma=0.1)
svr.fit(X_train_scaled,y_train)
print('調節參數后的"rbf"內核的SVR模型在訓練集得分:{:.3f}'.format(svr.score(X_train_scaled,y_train)))
print('調節參數后的"rbf"內核的SVR模型在測試集得分:{:.3f}'.format(svr.score(X_test_scaled,y_test)))
調節參數后的"rbf"內核的SVR模型在訓練集得分:0.966
調節參數后的"rbf"內核的SVR模型在測試集得分:0.894

總結:

  我們通過對數據預處理和參數的調節,使"rbf"內核的SVR模型在測試集中的得分從0.001升到0.894,

  於是我們可以知道SVM算法對數據預處理和調參的要求非常高.

 

文章引自 : 《深入淺出python機器學習》

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM