ラインとリターンラインバック---標準的な方法の非直線回帰式

はじめに:

唯一の勾配降下法を使用することはできません線形回帰問題を解決することは、あなたはまた、標準的な方程式法を使用することができ、今日は私が問題を解決するために、標準的な方程式法を使用しようとします

本体:

#老朋友就不介绍了
import numpy as np
from numpy import genfromtxt
import matplotlib.pyplot as plt
#载入数据
data = np.genfromtxt("data.csv",delimiter = ",")
#增加维度
x_data = data[:,0,np.newaxis]
y_data = data[:,1,np.newaxis]
#描点画图
plt.scatter(x_data,y_data)
plt.show()

フォトギャラリー:
ここに画像を挿入説明

#np.mat函数用来把数据转化为数组矩阵
print(np.mat(x_data).shape)
print(np.mat(y_data).shape)
#给样本添加偏置项
#用concatenate函数来合并项
#np.ones函数来创建全为1数组矩阵
x_data = np.concatenate((np.ones((100,1)),x_data),axis = 1)
print(x_data.shape)

次のように写真を示しています。
あなたは、変更x_dataの形式を見ることができます
ここに画像を挿入説明

#用标准方程来求参数
def weights(xArr,yArr):
    #用mat函数来生成矩阵
    xMat = np.mat(xArr)
    yMat = np.mat(yArr)
    xTx = xMat.T*xMat 
    #矩阵乘法
    #用linalg.det函数来计算矩阵的值,如果值为0.说明该矩阵没有逆矩阵
    if np.linalg.det(xTx) == 0.0:
        print("this matrix cannot do innverse")
        return
    #xTx.I是xTx的逆矩阵
    #xtx.T是xTx的转置矩阵
    #通过公式计算出ws,也就是方程各个参数的值
    #ws的值应为多个数值,即方程中未知参数的总量
    ws = xTx.I*xMat.T*yMat
    return ws
#代入我们的数据,并用写好的函数来计算ws的值
ws = weights(x_data,y_data)
print(ws)

結果は以下の通りであります:
ここに画像を挿入説明

#把x_data的范围固定20~80
x_test = np.array([[20],[80]])
#用ws中求出来的参数值,计算y的值
y_test = ws[0] + x_test*ws[1]
#描点描线
plt.plot(x_data,y_data,'b.')
plt.plot(x_test,y_test,'r')
#画图
plt.show()

ここに画像を挿入説明

要約:

同じ式はなく、マルチパラメータの問題のため、標準的な方法によって解決し、比較的単純なことができ、勾配降下法の適切な!

おすすめ

転載: www.cnblogs.com/lqk0216/p/12341958.html