<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 簡化為線性回歸 SVM 可用于擬合線性回歸。在本節中,我們將探討如何使用 TensorFlow 執行此操作。 ## 做好準備 可以將相同的最大邊際概念應用于擬合線性回歸。我們可以考慮最大化包含最多(`x`,`y`)點的邊距,而不是最大化分隔類的邊距。為了說明這一點,我們將使用相同的虹膜數據集,并表明我們可以使用此概念來擬合萼片長度和花瓣寬度之間的線。 相應的損失函數類似于: ![](https://img.kancloud.cn/f7/c1/f7c1dba9e09e7623e243667851a1571e_2220x220.png) 這里,`ε`是邊距寬度的一半,如果一個點位于該區域,則損失等于 0。 ## 操作步驟 我們按如下方式處理秘籍: 1. 首先,我們加載必要的庫,啟動圖,然后加載虹膜數據集。之后,我們將數據集拆分為訓練集和測試集,以顯示兩者的損失。使用以下代碼: ```py import matplotlib.pyplot as plt import numpy as np import tensorflow as tf from sklearn import datasets sess = tf.Session() iris = datasets.load_iris() x_vals = np.array([x[3] for x in iris.data]) y_vals = np.array([y[0] for y in iris.data]) train_indices = np.random.choice(len(x_vals), round(len(x_vals)*0.8), replace=False) test_indices = np.array(list(set(range(len(x_vals))) - set(train_indices))) x_vals_train = x_vals[train_indices] x_vals_test = x_vals[test_indices] y_vals_train = y_vals[train_indices] y_vals_test = y_vals[test_indices] ``` > 對于此示例,我們將數據拆分為訓練集和測試集。將數據拆分為三個數據集也很常見,其中包括驗證集。我們可以使用此驗證集來驗證我們在訓練它們時不會過擬合模型。 1. 讓我們聲明我們的批量大小,占位符和變量,并創建我們的線性模型,如下所示: ```py batch_size = 50 x_data = tf.placeholder(shape=[None, 1], dtype=tf.float32) y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32) A = tf.Variable(tf.random_normal(shape=[1,1])) b = tf.Variable(tf.random_normal(shape=[1,1])) model_output = tf.add(tf.matmul(x_data, A), b) ``` 1. 現在,我們宣布我們的損失函數。如前文所述,損失函數實現為`ε = 0.5`。請記住,epsilon 是我們的損失函數的一部分,它允許軟邊距而不是硬邊距: ```py epsilon = tf.constant([0.5]) loss = tf.reduce_mean(tf.maximum(0., tf.subtract(tf.abs(tf.subtract(model_output, y_target)), epsilon))) ``` 1. 我們創建一個優化器并接下來初始化我們的變量,如下所示: ```py my_opt = tf.train.GradientDescentOptimizer(0.075) train_step = my_opt.minimize(loss) init = tf.global_variables_initializer() sess.run(init) ``` 1. 現在,我們迭代 200 次訓練迭代并保存訓練和測試損失以便以后繪圖: ```py train_loss = [] test_loss = [] for i in range(200): rand_index = np.random.choice(len(x_vals_train), size=batch_size) rand_x = np.transpose([x_vals_train[rand_index]]) rand_y = np.transpose([y_vals_train[rand_index]]) sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y}) temp_train_loss = sess.run(loss, feed_dict={x_data: np.transpose([x_vals_train]), y_target: np.transpose([y_vals_train])}) train_loss.append(temp_train_loss) temp_test_loss = sess.run(loss, feed_dict={x_data: np.transpose([x_vals_test]), y_target: np.transpose([y_vals_test])}) test_loss.append(temp_test_loss) if (i+1)%50==0: print('-----------') print('Generation: ' + str(i)) print('A = ' + str(sess.run(A)) + ' b = ' + str(sess.run(b))) print('Train Loss = ' + str(temp_train_loss)) print('Test Loss = ' + str(temp_test_loss)) ``` 1. 這導致以下輸出: ```py Generation: 50 A = [[ 2.20651722]] b = [[ 2.71290684]] Train Loss = 0.609453 Test Loss = 0.460152 ----------- Generation: 100 A = [[ 1.6440177]] b = [[ 3.75240564]] Train Loss = 0.242519 Test Loss = 0.208901 ----------- Generation: 150 A = [[ 1.27711761]] b = [[ 4.3149066]] Train Loss = 0.108192 Test Loss = 0.119284 ----------- Generation: 200 A = [[ 1.05271816]] b = [[ 4.53690529]] Train Loss = 0.0799957 Test Loss = 0.107551 ``` 1. 我們現在可以提取我們找到的系數,并獲得最佳擬合線的值。出于繪圖目的,我們也將獲得邊距的值。使用以下代碼: ```py [[slope]] = sess.run(A) [[y_intercept]] = sess.run(b) [width] = sess.run(epsilon) best_fit = [] best_fit_upper = [] best_fit_lower = [] for i in x_vals: best_fit.append(slope*i+y_intercept) best_fit_upper.append(slope*i+y_intercept+width) best_fit_lower.append(slope*i+y_intercept-width) ``` 1. 最后,這里是用擬合線和訓練測試損失繪制數據的代碼: ```py plt.plot(x_vals, y_vals, 'o', label='Data Points') plt.plot(x_vals, best_fit, 'r-', label='SVM Regression Line', linewidth=3) plt.plot(x_vals, best_fit_upper, 'r--', linewidth=2) plt.plot(x_vals, best_fit_lower, 'r--', linewidth=2) plt.ylim([0, 10]) plt.legend(loc='lower right') plt.title('Sepal Length vs Petal Width') plt.xlabel('Petal Width') plt.ylabel('Sepal Length') plt.show() plt.plot(train_loss, 'k-', label='Train Set Loss') plt.plot(test_loss, 'r--', label='Test Set Loss') plt.title('L2 Loss per Generation') plt.xlabel('Generation') plt.ylabel('L2 Loss') plt.legend(loc='upper right') plt.show() ``` 上述代碼的圖如下: ![](https://img.kancloud.cn/d5/d4/d5d4f0b3f2d23346fbf8bbc0c3d5006c_386x278.png) 圖 5:虹膜數據上有 0.5 個邊緣的 SVM 回歸(萼片長度與花瓣寬度) 以下是訓練迭代中的訓練和測試損失: ![](https://img.kancloud.cn/3a/52/3a52b70c013181318f5522f816b182d0_384x281.png) 圖 6:訓練和測試集上每代的 SVM 回歸損失 ## 工作原理 直覺上,我們可以將 SVM 回歸看作是一個函數,試圖盡可能多地在`2ε`寬度范圍內擬合點。該線的擬合對該參數有些敏感。如果我們選擇太小的 epsilon,算法將無法適應邊距中的許多點。如果我們選擇太大的 epsilon,將會有許多行能夠適應邊距中的所有數據點。我們更喜歡較小的 epsilon,因為距離邊緣較近的點比較遠的點貢獻較少的損失。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看