# 使用矩陣逆方法
在這個秘籍中,我們將使用 TensorFlow 用矩陣逆方法求解二維線性回歸。
## 做好準備
線性回歸可以表示為一組矩陣方程,比如`Ax = b`。在這里,我們感興趣的是求解矩陣`x`中的系數。如果我們的觀察矩陣(設計矩陣)`A`不是正方形,我們必須要小心。解決`x`的解決方案可以表示為:

為了證明確實如此,我們將生成二維數據,在 TensorFlow 中解決它,并繪制結果。
## 操作步驟
我們按如下方式處理秘籍:
1. 首先,我們加載必要的庫,初始化圖并創建數據。請參閱以下代碼:
```py
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
sess = tf.Session()
x_vals = np.linspace(0, 10, 100)
y_vals = x_vals + np.random.normal(0, 1, 100)
```
1. 接下來,我們創建要在逆方法中使用的矩陣。我們首先創建`A`矩陣,它將是`x`數據列和 1s 列。然后,我們從`y`數據創建`b`矩陣。使用以下代碼:
```py
x_vals_column = np.transpose(np.matrix(x_vals))
ones_column = np.transpose(np.matrix(np.repeat(1, 100)))
A = np.column_stack((x_vals_column, ones_column))
b = np.transpose(np.matrix(y_vals))
```
1. 然后我們將`A`和`b`矩陣轉換為張量,如下所示:
```py
A_tensor = tf.constant(A)
b_tensor = tf.constant(b)
```
1. 現在我們已經設置了矩陣,我們可以使用 TensorFlow 通過矩陣逆方法解決這個問題,如下所示:
```py
tA_A = tf.matmul(tf.transpose(A_tensor), A_tensor)
tA_A_inv = tf.matrix_inverse(tA_A)
product = tf.matmul(tA_A_inv, tf.transpose(A_tensor))
solution = tf.matmul(product, b_tensor)
solution_eval = sess.run(solution)
```
1. 我們現在使用以下代碼從解,斜率和 y 截距中提取系數:
```py
slope = solution_eval[0][0]
y_intercept = solution_eval[1][0]
print('slope: ' + str(slope))
print('y_intercept: ' + str(y_intercept))
slope: 0.955707151739
y_intercept: 0.174366829314
best_fit = []
for i in x_vals:
best_fit.append(slope*i+y_intercept)
plt.plot(x_vals, y_vals, 'o', label='Data')
plt.plot(x_vals, best_fit, 'r-', label='Best fit line', linewidth=3)
plt.legend(loc='upper left')
plt.show()
```
我們得到前面代碼的圖,如下所示:

圖 1:數據點和通過矩陣逆方法獲得的最佳擬合線
## 工作原理
與之前的秘籍或本書中的大多數秘籍不同,此處的解決方案僅通過矩陣運算找到。我們將使用的大多數 TensorFlow 算法都是通過訓練循環實現的,并利用自動反向傳播來更新模型變量。在這里,我們通過實現將模型擬合到數據的直接解決方案來說明 TensorFlow 的多功能性。
> 我們在這里使用了一個二維數據示例來顯示與數據擬合的圖。值得注意的是,用于求解系數的公式
>
> 
>
> 將根據需要擴展到數據中的許多特征(除非存在任何共線性問題)。
- TensorFlow 入門
- 介紹
- TensorFlow 如何工作
- 聲明變量和張量
- 使用占位符和變量
- 使用矩陣
- 聲明操作符
- 實現激活函數
- 使用數據源
- 其他資源
- TensorFlow 的方式
- 介紹
- 計算圖中的操作
- 對嵌套操作分層
- 使用多個層
- 實現損失函數
- 實現反向傳播
- 使用批量和隨機訓練
- 把所有東西結合在一起
- 評估模型
- 線性回歸
- 介紹
- 使用矩陣逆方法
- 實現分解方法
- 學習 TensorFlow 線性回歸方法
- 理解線性回歸中的損失函數
- 實現 deming 回歸
- 實現套索和嶺回歸
- 實現彈性網絡回歸
- 實現邏輯回歸
- 支持向量機
- 介紹
- 使用線性 SVM
- 簡化為線性回歸
- 在 TensorFlow 中使用內核
- 實現非線性 SVM
- 實現多類 SVM
- 最近鄰方法
- 介紹
- 使用最近鄰
- 使用基于文本的距離
- 使用混合距離函數的計算
- 使用地址匹配的示例
- 使用最近鄰進行圖像識別
- 神經網絡
- 介紹
- 實現操作門
- 使用門和激活函數
- 實現單層神經網絡
- 實現不同的層
- 使用多層神經網絡
- 改進線性模型的預測
- 學習玩井字棋
- 自然語言處理
- 介紹
- 使用詞袋嵌入
- 實現 TF-IDF
- 使用 Skip-Gram 嵌入
- 使用 CBOW 嵌入
- 使用 word2vec 進行預測
- 使用 doc2vec 進行情緒分析
- 卷積神經網絡
- 介紹
- 實現簡單的 CNN
- 實現先進的 CNN
- 重新訓練現有的 CNN 模型
- 應用 StyleNet 和 NeuralStyle 項目
- 實現 DeepDream
- 循環神經網絡
- 介紹
- 為垃圾郵件預測實現 RNN
- 實現 LSTM 模型
- 堆疊多個 LSTM 層
- 創建序列到序列模型
- 訓練 Siamese RNN 相似性度量
- 將 TensorFlow 投入生產
- 介紹
- 實現單元測試
- 使用多個執行程序
- 并行化 TensorFlow
- 將 TensorFlow 投入生產
- 生產環境 TensorFlow 的一個例子
- 使用 TensorFlow 服務
- 更多 TensorFlow
- 介紹
- 可視化 TensorBoard 中的圖
- 使用遺傳算法
- 使用 k 均值聚類
- 求解常微分方程組
- 使用隨機森林
- 使用 TensorFlow 和 Keras