乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      線性回歸

       頭號碼甲 2020-05-24

      回歸問題:利用大量的樣本D=(xi, yi),i是1到N,通過有監(jiān)督的學(xué)習(xí),學(xué)習(xí)到由xy的映射f,利用該映射關(guān)系對未知的數(shù)據(jù)進行預(yù)估,因為y是連續(xù)值,所以是回歸問題

        • 如果只有一個變量

           
        • 如果是n個變量

           
           
      • 線性回歸表達式:機器學(xué)習(xí)是數(shù)據(jù)驅(qū)動的算法,數(shù)據(jù)驅(qū)動=數(shù)據(jù)+模型,模型就是輸入到輸出的映射關(guān)系

        模型 = 假設(shè)函數(shù)(不同的學(xué)習(xí)方式) + 優(yōu)化

        • 正則化的作用:控制參數(shù)變化幅度,對變化大的參數(shù)懲罰;限制參數(shù)搜索空間

        • 添加正則化的損失函數(shù)

           

          函數(shù)說明:m表示樣本個數(shù),n表示n個參數(shù),對n個參數(shù)進行懲罰,λ表示對誤差的懲罰程度,λ越大對誤差的懲罰越大,容易出現(xiàn)過擬合,λ越小對誤差的懲罰越小,對誤差的容忍度的越大,泛化能力越好

        • 過擬合的定義:在訓(xùn)練集上表現(xiàn)良好,在測試集上表現(xiàn)糟糕

        • 過擬合的原因:如果我們有很多的特征或者模型很復(fù)雜,則假設(shè)函數(shù)曲線可以對訓(xùn)練樣本你和的非常好,學(xué)習(xí)能力太強了,但是喪失了一般性。眼見不一定為實,訓(xùn)練樣本中肯定存在噪聲點,如果全都學(xué)習(xí)的話肯定會將噪聲學(xué)習(xí)進去。

        • 過擬合的后果:過擬合是給參數(shù)的自由空間太大了,可以通過簡單的方式讓參數(shù)變化太快,并未學(xué)習(xí)到底層的規(guī)律,模型抖動太大,很不穩(wěn)定,方差變大,對新數(shù)據(jù)沒有泛化能力

        • 過擬合的預(yù)防:獲取更多數(shù)據(jù),減少特征變量,限制權(quán)值(正則化),貝葉斯方法,結(jié)合多種模型

        • 欠擬合的定義:在訓(xùn)練集和測試集上表現(xiàn)都糟糕

        • 欠擬合的原因:由于數(shù)據(jù)復(fù)雜度較高的情況的出現(xiàn),此時模型的學(xué)習(xí)能力不足,無法學(xué)習(xí)到數(shù)據(jù)集的“一般規(guī)律”

        • 欠擬合的預(yù)防:引入新的特征,添加多項式特征,,減少正則化參數(shù)

        • 假設(shè)函數(shù)

          線性回歸的假設(shè)函數(shù)(θ0表示截距項,x0=1,θ,X表示列向量)

           
        • 優(yōu)化方法:監(jiān)督學(xué)習(xí)的優(yōu)化方法=損失函數(shù)+對損失函數(shù)的優(yōu)化

        • 損失函數(shù):損失函數(shù)度量預(yù)測值和標準答案的偏差,不同的參數(shù)有不同的偏差,所以要通過最小化損失函數(shù),也就是最小化偏差來得到最好的參數(shù)

          映射函數(shù):hθ(x)

          損失函數(shù):(由于有m個樣本,所以要平均,分母的2是為了方便求導(dǎo)),是一個凹函數(shù)

           
        • 損失函數(shù)的優(yōu)化:只有最小值,損失函數(shù)的值最小。但是如果存在3維及以上,計算量很大,極值難求

        • 梯度下降法:求極值(3維及以上)

          [梯度求解過程]  https://blog.csdn.net/weixin_34266504/article/details/94540839 
        • 過擬合和欠擬合:導(dǎo)致模型泛化能力不高的兩種常見的原因,都是模型學(xué)習(xí)能力與數(shù)據(jù)復(fù)雜度之間失配的結(jié)果

        • 利用正則化解決過擬合問題

      • 編碼實現(xiàn)

        import pandas as pdimport numpy as npfrom matplotlib import pyplot as pltfrom sklearn.linear_model import LinearRegressionfrom mpl_toolkits.mplot3d import axes3dimport seaborn as snsclass MyRegression:def __init__(self):
                pd.set_option("display.notebook_repr_html", False)
                pd.set_option("display.max_columns", None)
                pd.set_option("display.max_rows", None)
                pd.set_option("display.max_seq_items", None)
        
                sns.set_context("notebook")
                sns.set_style("white")
        
                self.warmUpExercise = np.identity(5)
                self.data = np.loadtxt("testSet.txt", delimiter="\t")# 100*2self.x = np.c_[np.ones(self.data.shape[0]), self.data[:, 0]]# 100*1self.y = np.c_[self.data[:, 1]]def data_view(self):
                plt.scatter(self.x[:, 1], self.y, s=30, c="r", marker="x", linewidths=1)
                plt.xlabel("x軸")
                plt.ylabel("y軸")
                plt.show()# 計算損失函數(shù)def compute_cost(self, theta=[[0], [0]]):
                m = self.y.size
                h = self.x.dot(theta)
                J = 1.0 / (2*m) * (np.sum(np.square(h - self.y)))return J# 梯度下降def gradient_descent(self, theta=[[0], [0]], alpha=0.01, num_iters=100):
                m = self.y.size
                J_history = np.zeros(num_iters)for iters in np.arange(num_iters):
                    h = self.x.dot(theta)# theta的迭代計算theta = theta - alpha * (1.0 / m) * (self.x.T.dot(h-self.y))
                    J_history[iters] = self.compute_cost(theta)return theta, J_historydef result_view1(self):
                theta, J_history = self.gradient_descent()
                plt.plot(J_history)
                plt.ylabel("Cost J")
                plt.xlabel("Iterations")
                plt.show()def result_view2(self):
                theta, J_history = self.gradient_descent()
                xx = np.arange(-5, 10)
                yy = theta[0] + theta[1] * xx# 畫出我們自己寫的線性回歸梯度下降收斂的情況plt.scatter(self.x[:, 1], self.y, s=30, c="g", marker="x", linewidths=1)
                plt.plot(xx, yy, label="Linear Regression (Gradient descent)")# 和Scikit-learn中的線性回歸對比一下regr = LinearRegression()
                regr.fit(self.x[:, 1].reshape(-1, 1), self.y.ravel())
                plt.plot(xx, regr.intercept_+regr.coef_*xx, label="Linear Regression (Scikit-learn GLM)")
        
                plt.xlabel("x軸")
                plt.ylabel("y軸")
                plt.legend(loc=4)
                plt.show()if __name__ == '__main__':
            my_regression = MyRegression()# my_regression.result_view1()my_regression.result_view2()

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多