您好,登錄后才能下訂單哦!
scikit-learn是python的第三方機器學習庫,里面集成了大量機器學習的常用方法。例如:貝葉斯,svm,knn等。
scikit-learn的官網 : http://scikit-learn.org/stable/index.html點擊打開鏈接
SVR是支持向量回歸(support vector regression)的英文縮寫,是支持向量機(SVM)的重要的應用分支。
scikit-learn中提供了基于libsvm的SVR解決方案。
PS:libsvm是臺灣大學林智仁教授等開發設計的一個簡單、易于使用和快速有效的SVM模式識別與回歸的軟件包。
我們自己隨機產生一些值,然后使用sin函數進行映射,使用SVR對數據進行擬合
from __future__ import division import time import numpy as np from sklearn.svm import SVR from sklearn.model_selection import GridSearchCV from sklearn.model_selection import learning_curve import matplotlib.pyplot as plt rng = np.random.RandomState(0) ############################################################################# # 生成隨機數據 X = 5 * rng.rand(10000, 1) y = np.sin(X).ravel() # 在標簽中對每50個結果標簽添加噪聲 y[::50] += 2 * (0.5 - rng.rand(int(X.shape[0]/50))) X_plot = np.linspace(0, 5, 100000)[:, None] ############################################################################# # 訓練SVR模型 #訓練規模 train_size = 100 #初始化SVR svr = GridSearchCV(SVR(kernel='rbf', gamma=0.1), cv=5, param_grid={"C": [1e0, 1e1, 1e2, 1e3], "gamma": np.logspace(-2, 2, 5)}) #記錄訓練時間 t0 = time.time() #訓練 svr.fit(X[:train_size], y[:train_size]) svr_fit = time.time() - t0 t0 = time.time() #測試 y_svr = svr.predict(X_plot) svr_predict = time.time() - t0
然后我們對結果進行可視化處理
############################################################################# # 對結果進行顯示 plt.scatter(X[:100], y[:100], c='k', label='data', zorder=1) plt.hold('on') plt.plot(X_plot, y_svr, c='r', label='SVR (fit: %.3fs, predict: %.3fs)' % (svr_fit, svr_predict)) plt.xlabel('data') plt.ylabel('target') plt.title('SVR versus Kernel Ridge') plt.legend() plt.figure()
############################################################################## # 對訓練和測試的過程耗時進行可視化 X = 5 * rng.rand(1000000, 1) y = np.sin(X).ravel() y[::50] += 2 * (0.5 - rng.rand(int(X.shape[0]/50))) sizes = np.logspace(1, 4, 7) for name, estimator in { "SVR": SVR(kernel='rbf', C=1e1, gamma=10)}.items(): train_time = [] test_time = [] for train_test_size in sizes: t0 = time.time() estimator.fit(X[:int(train_test_size)], y[:int(train_test_size)]) train_time.append(time.time() - t0) t0 = time.time() estimator.predict(X_plot[:1000]) test_time.append(time.time() - t0) plt.plot(sizes, train_time, 'o-', color="b" if name == "SVR" else "g", label="%s (train)" % name) plt.plot(sizes, test_time, 'o--', color="r" if name == "SVR" else "g", label="%s (test)" % name) plt.xscale("log") plt.yscale("log") plt.xlabel("Train size") plt.ylabel("Time (seconds)") plt.title('Execution Time') plt.legend(loc="best")
################################################################################ # 對學習過程進行可視化 plt.figure() svr = SVR(kernel='rbf', C=1e1, gamma=0.1) train_sizes, train_scores_svr, test_scores_svr = \ learning_curve(svr, X[:100], y[:100], train_sizes=np.linspace(0.1, 1, 10), scoring="neg_mean_squared_error", cv=10) plt.plot(train_sizes, -test_scores_svr.mean(1), 'o-', color="r", label="SVR") plt.xlabel("Train size") plt.ylabel("Mean Squared Error") plt.title('Learning curves') plt.legend(loc="best") plt.show()
看見了熟悉的LOSS下降圖,我仿佛又回到了學生時代。。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。