機器學習線性回歸案例講解 機器學習例項 線性回歸

2021-10-19 06:33:33 字數 2930 閱讀 9488

一、問題引入

1.首先明確幾個概念目前三大最常見的機器學習任務:

1.回歸問題

2.分類問題

3.聚類問題

machine learning機器學習是artificial inteligence的核心,分為四類:

1、supervised learning監督學習

是有特徵(feature)和標籤(label)的,即便是沒有標籤的,機器也是可以通過特徵和標籤之間的關係,判斷出標籤。舉例子理解:高考試題是在考試前就有標準答案的,在學習和做題的過程中,可以對照答案,分析問題找出方法。在高考題沒有給出答案的時候,也是可以給出正確的解決。這就是監督學習。

一句話概括:給定資料,**標籤。

通過已有的一部分輸入資料與輸出資料之間的對應關係,生成乙個函式,將輸入對映到合適的輸出,例如分類。

2、unsupervised learning無監督學習

只有特徵,沒有標籤。舉例子理解:高考前的一些模擬試卷,是沒有標準答案的,也就是沒有參照是對還是錯,但是我們還是可以根據這些問題之間的聯絡將語文、數學、英語分開,這個過程就叫做聚類。在只有特徵,沒有標籤的訓練資料集中,通過資料之間的內在聯絡和相似性將他們分成若干類。

一句話概括:給定資料,尋找隱藏的結構。

直接對資料集建模。

以上兩者的區別:監督學習只利用標記的樣本集進行學習,而無監督學習只利用未標記的樣本集。

3、semi-supervised learning半監督學習

使用的資料,一部分是標記過的,而大部分是沒有標記的。和監督學習相比較,半監督學習的成本較低,但是又能達到較高的準確度。

綜合利用有類標的和沒有類標的資料,來生成合適的分類函式。

半監督學習出現的背景:實際問題中,通常只有少量的有標記的資料,因為對資料進行標記的代價有時很高,比如在生物學中,對某種蛋白質的結構分析或者功能鑑定,可能會花上生物學家很多年的工作,而大量的未標記的資料卻很容易得到。

4、reinforcement learning強化學習

強化學習也是使用未標記的資料,但是可以通過一些方法知道你是離正確答案越來越近還是越來越遠(獎懲函式)。可以把獎懲函式看作正確答案的乙個延遲、稀疏的形式。可以得到乙個延遲的反饋,並且只有提示你是離答案越來越近還是越來越遠。

2.回歸問題

通過已有的一部分輸入資料與輸出資料之間的對應關係,生成乙個函式,將輸入對映到合適的輸出。

我們通過這組資料,可以得到房屋大小與房價之間的乙個關係:

這條藍色的線就表示了這樣一種關係,我們現在的問題就是找出這樣一條線,使其能擬合我們的資料。

注:擬合:能最大程度的表現現有資料的規律

所以現在我們的問題就變成了:(從最開始的**房價變為了純數學問題)

注:成本函式:(均方誤差)誤差求和求平均,此處1/2m是為了後續計算的方便。

接下來的問題是:如何找到這樣的θ0,θ1,使得損失函式j(θ0,θ1)最小呢?

接下來通過樣本集的資料計算損失函式:

計算損失函式:j(θ0,θ1)=2.3

確定乙個點(0,2.3)

計算損失函式:j(θ0,θ1)=0

確定乙個點(1,0)

計算損失函式:j(θ0,θ1)=0.58

確定乙個點(1.5,0.58)

函式影象:是類似於最低點是(1,0)點的開口向上的一元二次函式影象。(這裡就不畫了)

類似於:

我們通過不停的計算θ0,θ1,求得最小的j(θ0,θ1),顯然這樣的計算工作是巨大的,這就需要用到梯度下降法了:

從圖上來看:

我們模擬一下:想象自己在山頂,想要最快下山(應該朝哪個方向,邁多大的步子,每邁一步,繼續做同樣的判斷),這就是梯度下降法要做的事情。

這每一步,在二維平面上看就像這樣:

直到找到這樣乙個最低點,就是區域性最優解,或最優解。

那麼,我們在遇到乙個線性回歸問題時,是不是需要我們每次都寫乙個**函式,再定義乙個損失函式,最後再實現梯度下降演算法呢?並不是這樣的,python中有乙個sklearn包都已經封裝好了這些常用的機器學習演算法,我們只需要用就好了。

二、**演示

接下來我們用sklearn實現一下這個案例:

%matplotlib inline

import matplotlib.pyplot as plt

import numpy as np

#此處x是房屋面積,y是房價,我們簡化了資料,我們有真實的資料,直接替換就好了

x=np.array([1,2,3,4])

y=np.array([4,6,10,16])

from sklearn.linear_model import linearregression

# 建立乙個線性回歸模型

model=linearregression()

# 對資料做乙個變換(sklearn包的要求)

# reshape(-1,1)資料變為一列,reshape(1,-1)資料變為一行

x=x.reshape(-1,1)

y=y.reshape(-1,1)

# 訓練模型

model.fit(x,y)

# 該線性回歸模型的訓練得分(可以理解為該模型在資料集上的乙個準確率)

train_score=model.score(x,y)

# 繪畫散點圖

plt.scatter(x,y)

plt.plot(x,model.predict(x),'r-')

#模型的訓練得分,可以理解為該模型在資料集上的乙個準確率

train_score

0.9523809523809523

在機器學習中我們訓練模型後,需要把模型儲存到本地,這裡我們採用joblib來儲存

from sklearn.externals import joblib

#儲存模型

joblib.dump()

#載入模型

joblib.load()

#通過該模型繼續**

model.predict()

機器學習線性回歸案例講解 機器學習實戰 線性回歸

本文將用 泰坦尼克船員獲救 這一案例展示一下使用線性回歸建模的流程。首先匯入原始的資料並展示資料的前5行,大致了解一下資料的情況。原始資料中分別有以下幾列資訊 passengerid survived pclass name age sibsp parch ticket fare cabin emb...

機器學習2 回歸案例

為了衡量func set中的某個function的好壞,我們需要乙個評估函式,即loss function,損失函式,簡稱l loss function是乙個function的function l f l w,b l f l w,b l f l w,b gradient descent的厲害之處在於...

多元線性回歸案例

fromnumpyimportgenfromtxt importnumpyasnpy fromsklearnimportdatasets,linear model filepath r g 六西格瑪 第一階段 深度學習基礎 與素材 與素材 2 machinelearning multilinearr...