日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

線性回歸

 頭號(hào)碼甲 2020-05-24

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

    • 如果只有一個(gè)變量

       
    • 如果是n個(gè)變量

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

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

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

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

       

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

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

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

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

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

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

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

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

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

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

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

    • 損失函數(shù):損失函數(shù)度量預(yù)測(cè)值和標(biāo)準(zhǔn)答案的偏差,不同的參數(shù)有不同的偏差,所以要通過(guò)最小化損失函數(shù),也就是最小化偏差來(lái)得到最好的參數(shù)

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

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

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

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

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

    • 利用正則化解決過(guò)擬合問(wèn)題

  • 編碼實(shí)現(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()# 計(jì)算損失函數(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的迭代計(jì)算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中的線性回歸對(duì)比一下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()

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多