140性锭、機器學習(入門):簡單線性回歸

一、什么是機器學習奶甘?
機器學習是人工智能的一種技術(shù)篷店。
機器學習的本質(zhì)其實就是通過訓(xùn)練集建立一個模型,而后可以通過這個模型實現(xiàn)對于特征的識別臭家,得出結(jié)果標簽疲陕,而這個模型可以是多種多樣的,簡單線性回歸模型只是其中的最基礎(chǔ)最簡單的一種模型钉赁。
二蹄殃、機器學習的步驟
1、提出問題
一切機器學習的目標都是為了解決我們生活或工作中遇到的實際問題你踩。
2诅岩、理解數(shù)據(jù)
理解數(shù)據(jù)包括三方面內(nèi)容:
一是采集數(shù)據(jù),根據(jù)研究問題采集相關(guān)的數(shù)據(jù)带膜。
二是導(dǎo)入數(shù)據(jù)吩谦,將存放各個地方的數(shù)據(jù)導(dǎo)入到PYTHON數(shù)據(jù)結(jié)構(gòu)中,比如讀取數(shù)據(jù)到PYTHON的數(shù)據(jù)框中膝藕。
三是查看數(shù)據(jù)集信息式廷,包括描述統(tǒng)計信息,從整體上理解這個數(shù)據(jù)芭挽。
3滑废、數(shù)據(jù)清洗
數(shù)據(jù)清洗也叫數(shù)據(jù)預(yù)處理,就是對數(shù)據(jù)進行整容整成我們希望的樣子袜爪,這個過程實質(zhì)是從數(shù)據(jù)集中提取我們想要的特征信息蠕趁。
4、構(gòu)建模型
使用訓(xùn)練數(shù)據(jù)構(gòu)建模型辛馆,就是使用上面第3部分的特征放入機器學習的算法中獲得數(shù)據(jù)標簽俺陋。機器學習里面最核心的就是機器學習的算法,而機器學習會有不同的算法昙篙。
5倔韭、評估
有了模型以后,要對這個模型進行評估瓢对。通過測試數(shù)據(jù)來評估模型的預(yù)測效果如何。
三胰苏、線性回歸
1硕蛹、相關(guān)性分析
線性回歸是利用數(shù)理統(tǒng)計中回歸分析醇疼,來確定兩種或兩種以上變量間相互依賴的定量關(guān)系的一種統(tǒng)計分析方法。
相關(guān)性分析是指對兩個或多個具備相關(guān)性的變量元素進行分析法焰,從而衡量兩個變量因素的相關(guān)密切程度秧荆。

以雙變量為例,變量X和變量Y之間存在三種關(guān)系:正線性相關(guān)埃仪、負線性相關(guān)乙濒、不是線性相關(guān)(有可能是曲線相關(guān),只不過不是線性的):
1相關(guān)性3種關(guān)系.jpg

2卵蛉、衡量相關(guān)性程度

(1)判斷兩個變量的相關(guān)性方向是正線性相關(guān)或負線性相關(guān):
2相關(guān)性方向.jpg

如果兩個變量是同方向變化:
3同方向變化.jpg

如果兩個變量是反方向變化:
4反方向變化.jpg

(2)為表示兩個變量相關(guān)性程度颁股,需要引入兩個統(tǒng)計量,協(xié)方差和相關(guān)系數(shù)
a傻丝、協(xié)方差
協(xié)方差計算公式為:cov(X,Y) = E[(X-E[X])(Y-E[Y])]

兩個數(shù)據(jù)點的協(xié)方差計算公式:
5協(xié)方差公式.jpg

b甘有、相關(guān)系數(shù)
相關(guān)系數(shù)是標準化后的協(xié)方差,消除了變量變化幅度的影響葡缰,表示變量每單位變化的相似程度亏掀。

相關(guān)系數(shù)計算公式:
6相關(guān)系數(shù)公式.jpg

衡量相關(guān)性程度最重要的一點是看相關(guān)系數(shù):
I、如果相關(guān)系數(shù)小于0泛释,則為負線性相關(guān)滤愕,大于0 ,則為正線性相關(guān)怜校。

II间影、相關(guān)系數(shù)的取值范圍為-1之1間,越靠近-1或者1則相關(guān)性越強韭畸。相關(guān)系數(shù)在0至0.3或-0.3至0表示相關(guān)性較弱宇智,0.3至0.6或-0.6至-0.3表示中等程度相關(guān),0.6至1或-1至-0.6表示變量強相關(guān)胰丁。如下圖所示:
7相關(guān)系數(shù)分類.jpg

3随橘、最佳擬合線

在散點圖上繪制一條直線,使得這條直線盡可能多通過數(shù)據(jù)點锦庸,要求出最佳擬合線需要求出回歸方程y=a+bx机蔗,其中a為截距,b為回歸系數(shù)甘萧,在方程中使得y的實際觀察值與每個x相對應(yīng)的y的估計值的差距為最小萝嘁,即通過最小二乘法擬合:
8最佳擬合線.jpg
9最佳擬合線2.jpg

4、評估模型精確度
可以使用決定系數(shù)R平方來評估模型精確度

如下圖1和圖2所示扬卷,圖2比圖1數(shù)據(jù)集多牙言,點誤差平方和比圖1大,但這并不能說明圖2精確度比圖1泄值谩:
10如何評估模型.jpg

此時需要引入決定系數(shù)R平方:

決定系數(shù)R平方.jpg

決定系數(shù)R平方的兩個作用是:
(1)描述有多少百分比的y波動可以由回歸線來描述(即x的波動變化)咱枉;
(2)決定系數(shù)R平方的值越高卑硫,回歸模型越精確。
四蚕断、簡單線性回歸案例
本次案例的目的是:為了了解學習時間與考試成績的關(guān)系欢伏,并通過建立模型,預(yù)測考試成績亿乳。

(1)先創(chuàng)建數(shù)據(jù)集并提取特征和標簽:
21.png

(2)通過繪制原始數(shù)據(jù)的散點圖硝拧,看看學習時間與考試成績是否存在線性相關(guān):
22.png

(3)通過散點圖發(fā)現(xiàn)學習時間與考試成績符合線性回歸的模式,為了構(gòu)建模型先要建立訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù):
23.png

(4)接著描繪訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)圖像:
24.png

(5)構(gòu)建線性回歸模型:
25.png

(6)在構(gòu)建模型時代碼發(fā)生報錯葛假,此時需要分析報錯的原因障陶,通過報錯信息知道,報錯的原因是輸入的特征只有一個桐款,需要改變數(shù)組類型咸这,具體實現(xiàn)如下:
26.png

(7)找出最佳擬合線:
27.png

(8)繪制最佳擬合線的圖像:
28.png

(9)構(gòu)建相關(guān)系數(shù)矩陣:
29.png

(10)求出決定系數(shù)R平方:
30.png

(11)通過測試數(shù)據(jù)進行評估模型:
31.png

結(jié)論:通過上面的求出決定系數(shù)R平方為0.929,決定系數(shù)R平方非常接近1魔眨,決定系數(shù)R平方越大說明學習時間與考試成績成正線性相關(guān)媳维,即學習時間越長,考試成績越好遏暴。

源碼:

# coding: utf-8

# ### 創(chuàng)建數(shù)據(jù)集并提取特征和標簽

# In[1]:


#  導(dǎo)入相關(guān)模塊
from collections import OrderedDict
import pandas as pd


# In[2]:


# 數(shù)據(jù)集
examDict={
    '學習時間':[0.5,0.75,1,1.25,1.5,1.75,1.75,2,2.25,2.5,
                2.75,3,3.25,3.5,4,4.25,4.5,4.75,5,5.5],
    '分數(shù)':[10,22,13,43,20,22,33,50,62,48,
            55,75,62,73,81,76,64,82,90,93]
}
examOrderDict=OrderedDict(examDict)
examDf=pd.DataFrame(examOrderDict)


# In[3]:


examDf.head()


# In[4]:


# 提取特征和標簽 
# 特征features
exam_X=examDf.loc[:,'學習時間']
# 標簽labes
exam_y=examDf.loc[:,'分數(shù)']


# ### 描繪原始數(shù)據(jù)圖像

# In[5]:


# 繪制散點圖
import matplotlib.pyplot as plt
# 畫圖時用于顯示中文字符
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # SimHei是黑體的意思

# 散點圖
plt.scatter(exam_X,exam_y,color='b',label='考試數(shù)據(jù)')

# 添加圖標標簽
plt.xlabel('時間')
plt.ylabel('分數(shù)')
# 顯示圖像
plt.show()


# ### 建立訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)

# In[6]:


'''
train_test_split是交叉驗證中常用的函數(shù)侄刽,功能是從樣本數(shù)據(jù)中隨機按比例選取訓(xùn)練數(shù)據(jù)(train)和測試數(shù)據(jù)(test)
第一個參數(shù):所要劃分的樣本特征
第二個參數(shù):所要劃分的樣本標簽
train_size:訓(xùn)練數(shù)據(jù)占比,如果是整數(shù)就是樣本的數(shù)量
'''
from sklearn.cross_validation import train_test_split

# 建立訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)
X_train,X_test,y_train,y_test = train_test_split(exam_X,exam_y,train_size=0.8)

# 輸出數(shù)據(jù)大小
print('原始數(shù)據(jù)特征:',exam_X.shape,
      '朋凉,訓(xùn)練數(shù)據(jù)特征:',X_train.shape,
      '州丹,測試數(shù)據(jù)特征:',X_test.shape)

print('原始數(shù)據(jù)標簽:',exam_y.shape,
      ',訓(xùn)練數(shù)據(jù)標簽:',y_train.shape,
      '杂彭,測試數(shù)據(jù)標簽:',y_test.shape)


# ### 描繪訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)圖像

# In[7]:


# 繪制散點圖
plt.scatter(X_train,y_train,color='blue',label='訓(xùn)練數(shù)據(jù)')
plt.scatter(X_test,y_test,color='red',label='測試數(shù)據(jù)')

# 添加圖標標簽
plt.legend(loc=2)
plt.xlabel('學習時間')
plt.ylabel('分數(shù)')
# 顯示圖像
plt.show()


# ### 構(gòu)建訓(xùn)練模型

# In[8]:


# 第1步:導(dǎo)入線性回歸
from sklearn.linear_model import LinearRegression
# 第2步:創(chuàng)建模型:線性回歸
model = LinearRegression()
# 第3步:訓(xùn)練模型
model.fit(X_train,y_train)


# In[9]:


'''
上面的代碼出現(xiàn)報錯墓毒,報錯的原因是輸入的特征只有一個,
sklearn要求輸入的特征必須是二維數(shù)組的類型亲怠,但是因為我們目前只有1個特征所计,
所以需要用array.reshape(-1, 1)轉(zhuǎn)行成二維數(shù)組的類型。
reshape行的參數(shù)是-1团秽,就會根據(jù)所給的列數(shù)主胧,自動按照原始數(shù)組的大小形成一個新的數(shù)組
'''
# 將訓(xùn)練數(shù)據(jù)特征轉(zhuǎn)化成二維數(shù)組XX行*1列形式
X_train = X_train.values.reshape(-1,1)
# 將測試數(shù)據(jù)特征轉(zhuǎn)化為二維數(shù)組XX行*1列
X_test = X_test.values.reshape(-1,1)

# 第1步:導(dǎo)入線性回歸
from sklearn.linear_model import LinearRegression
# 第2步:創(chuàng)建模型:線性回歸
model = LinearRegression()
# 第3步:訓(xùn)練模型
model.fit(X_train,y_train)


# ### 最佳擬合線

# In[10]:


'''
擬合最佳的直線:z=a+bx
截距intercept:a
回歸系數(shù):b
'''

# 截距
a = model.intercept_
# 回歸系數(shù)
b = model.coef_

print('最佳擬合線:截距a=',a,',回歸系數(shù)b=',b)


# In[11]:


# 繪圖
# 訓(xùn)練數(shù)據(jù)散點圖
plt.scatter(X_train,y_train,color='blue',label='訓(xùn)練數(shù)據(jù)')

# 訓(xùn)練數(shù)據(jù)的預(yù)測值
y_train_pred = model.predict(X_train)
# 繪制最佳擬合線
plt.plot(X_train,y_train_pred,color='black',linewidth=3,label='最佳擬合線')

# 添加圖標標簽
plt.legend(loc=2) 
plt.xlabel='時間'
plt.ylabel='得分'
# 顯示圖像
plt.show()


# In[12]:


# 相關(guān)系數(shù):corr返回結(jié)果是一個數(shù)據(jù)框习勤,存放的是相關(guān)系數(shù)矩陣
rDf = examDf.corr()
print('相關(guān)系數(shù)矩陣:')
rDf


# ### 評估模型

# In[13]:


# 線性回歸的score方法得到的是決定系數(shù)R平方
# 評估模型:決定系數(shù)R平方
model.score(X_test,y_test)


# In[14]:


# 繪圖
# 訓(xùn)練數(shù)據(jù)散點圖
plt.scatter(X_train,y_train,color='blue',label='訓(xùn)練數(shù)據(jù)')

# 訓(xùn)練數(shù)據(jù)的預(yù)測值
y_train_pred = model.predict(X_train)
# 繪制最佳擬合線
plt.plot(X_train,y_train_pred,color='black',linewidth=3,label='最佳擬合線')

# 測試數(shù)據(jù)散點圖
plt.scatter(X_test,y_test,color='red',label='測試數(shù)據(jù)')

# 添加圖標標簽
plt.legend(loc=2) 
plt.xlabel='時間'
plt.ylabel='得分'
# 顯示圖像
plt.show()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末踪栋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子图毕,更是在濱河造成了極大的恐慌夷都,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件予颤,死亡現(xiàn)場離奇詭異囤官,居然都是意外死亡厢破,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門治拿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人笆焰,你說我怎么就攤上這事劫谅。” “怎么了嚷掠?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵捏检,是天一觀的道長。 經(jīng)常有香客問我不皆,道長贯城,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任霹娄,我火速辦了婚禮能犯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘犬耻。我一直安慰自己踩晶,他們只是感情好,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布枕磁。 她就那樣靜靜地躺著渡蜻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪计济。 梳的紋絲不亂的頭發(fā)上茸苇,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機與錄音沦寂,去河邊找鬼学密。 笑死,一個胖子當著我的面吹牛凑队,可吹牛的內(nèi)容都是我干的则果。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼漩氨,長吁一口氣:“原來是場噩夢啊……” “哼西壮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叫惊,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤款青,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后霍狰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抡草,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡饰及,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了康震。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片燎含。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖腿短,靈堂內(nèi)的尸體忽然破棺而出屏箍,到底是詐尸還是另有隱情,我是刑警寧澤橘忱,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布赴魁,位于F島的核電站,受9級特大地震影響钝诚,放射性物質(zhì)發(fā)生泄漏颖御。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一凝颇、第九天 我趴在偏房一處隱蔽的房頂上張望潘拱。 院中可真熱鬧,春花似錦祈噪、人聲如沸震捣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喷屋。三九已至,卻和暖如春月褥,著一層夾襖步出監(jiān)牢的瞬間弛随,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工宁赤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留舀透,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓决左,卻偏偏與公主長得像愕够,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子佛猛,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容