一、什么是機器學習奶甘?
機器學習是人工智能的一種技術(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)密切程度秧荆。
2卵蛉、衡量相關(guān)性程度
(2)為表示兩個變量相關(guān)性程度颁股,需要引入兩個統(tǒng)計量,協(xié)方差和相關(guān)系數(shù)
a傻丝、協(xié)方差
協(xié)方差計算公式為:cov(X,Y) = E[(X-E[X])(Y-E[Y])]
b甘有、相關(guān)系數(shù)
相關(guān)系數(shù)是標準化后的協(xié)方差,消除了變量變化幅度的影響葡缰,表示變量每單位變化的相似程度亏掀。
衡量相關(guān)性程度最重要的一點是看相關(guān)系數(shù):
I、如果相關(guān)系數(shù)小于0泛释,則為負線性相關(guān)滤愕,大于0 ,則為正線性相關(guān)怜校。
3随橘、最佳擬合線
4、評估模型精確度
可以使用決定系數(shù)R平方來評估模型精確度
決定系數(shù)R平方的兩個作用是:
(1)描述有多少百分比的y波動可以由回歸線來描述(即x的波動變化)咱枉;
(2)決定系數(shù)R平方的值越高卑硫,回歸模型越精確。
四蚕断、簡單線性回歸案例
本次案例的目的是:為了了解學習時間與考試成績的關(guān)系欢伏,并通過建立模型,預(yù)測考試成績亿乳。
結(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()