scikit-learn是python的第三方機(jī)器學(xué)習(xí)庫,里面集成了大量機(jī)器學(xué)習(xí)的常用方法。例如:貝葉斯,svm,knn等。
scikit-learn的官網(wǎng) : http://scikit-learn.org/stable/index.html點(diǎn)擊打開鏈接
SVR是支持向量回歸(support vector regression)的英文縮寫,是支持向量機(jī)(SVM)的重要的應(yīng)用分支。
scikit-learn中提供了基于libsvm的SVR解決方案。
PS:libsvm是臺灣大學(xué)林智仁教授等開發(fā)設(shè)計(jì)的一個(gè)簡單、易于使用和快速有效的SVM模式識別與回歸的軟件包。
我們自己隨機(jī)產(chǎn)生一些值,然后使用sin函數(shù)進(jìn)行映射,使用SVR對數(shù)據(jù)進(jìn)行擬合
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) ############################################################################# # 生成隨機(jī)數(shù)據(jù) X = 5 * rng.rand(10000, 1) y = np.sin(X).ravel() # 在標(biāo)簽中對每50個(gè)結(jié)果標(biāo)簽添加噪聲 y[::50] += 2 * (0.5 - rng.rand(int(X.shape[0]/50))) X_plot = np.linspace(0, 5, 100000)[:, None] ############################################################################# # 訓(xùn)練SVR模型 #訓(xùn)練規(guī)模 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)}) #記錄訓(xùn)練時(shí)間 t0 = time.time() #訓(xùn)練 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
然后我們對結(jié)果進(jìn)行可視化處理
############################################################################# # 對結(jié)果進(jìn)行顯示 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ùn)練和測試的過程耗時(shí)進(jìn)行可視化 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")
################################################################################ # 對學(xué)習(xí)過程進(jìn)行可視化 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下降圖,我仿佛又回到了學(xué)生時(shí)代。。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
