1.本節重點知識點用自己的話總結出來,可以配上圖片,以及說明該知識點的重要性
(1)本節課的內容思維導圖
監督學習:可以用於映射出該實例的類別。
無監督學習:我們只知道特征,並不知道答案,不同的實例具有一定的相似性,把那些相似的聚集在一起。
(2)回歸與分類的區別
回歸與分類的區別最主要是要看預測的目標函數是否連續,連續變量預測的為回歸,例如:預測明天的氣溫是多少度,這是回歸任務,而對離散變量的預測稱為分類,例如:預測明天天氣是晴還是陰,這是一個分類任務,做預測前首先要分清他是回歸任務還是分類任務,這樣才能選擇合適的算法預測。
(3)回歸算法可以運用的領域
1)房價預測
面積對價格的影響
2)銷售額的預測
3)貸款額度的預測
(4)線性關系模型
(5)數組與矩陣的運算
數組:
0維:1,2,3
1維:[1,2,3]
2維:[[1,2,3],[4,5,6]]兩行三列2*3
3維:[[[1,2,3],[4,5,6],[4,5,6],[4,5,6]]]
矩陣:
1.矩陣必須是二維的
2.矩陣滿足了特殊的運算要求
相同的內容,執行數組與矩陣的乘法運算
數組的乘法運算:
[[1,2,3,4], [[1*1,2*2,3*3,4*4], [[1,4,9,16],
[5,6,7,8], * [1,2,3,4]= [5*1,6*2,7*3,8*4], = [5,12,21,32],
[9,10,11,12]] [9*1,10*2,11*3,12*4]] [9,20,33,48]]
矩陣的乘法運算:(兩個矩陣相乘,前者的列數一定與后者的行數相等(m行*n列) *(h行*k列)=(m行,k列)
主要方法:用左邊矩陣的第一行,逐個乘以右邊矩陣的列,第一行與第一列各個元素的乘積相加,第一行與第二列的各個元素的乘積相加...
[[1,2,3,4], [ [1], [[1*1+2*2+3*3+4*4],
[5,6,7,8], * [2], = [5*1+6*2+7*3+8*4], = [[30],[70],[110]]
[9,10,11,12]] [3], [9*1+10*2+11*3+12*4]]
[4] ]
矩陣的這種運算正好可以滿足了線性回歸的計算基礎,所以我們首先要學會矩陣的運算
(6)損失函數
(7)兩種減少誤差的方式
1)最小二乘法之正規方程
T:將矩陣轉置(行變列,列變行)
X-1 :求逆矩陣(X*?=單位矩陣 ,?就是x的逆矩陣)
2)最小二乘法之梯度下降法
在單變量的函數中,梯度其實就是函數的微分,代表着函數在某個給定點的切線的斜率。
在多變量函數中,梯度是一個向量,向量有方向,梯度的方向就指出了函數在給定點的上升最快的方向。
代碼
import random
import time
import matplotlib.pyplot as plt
# 創建數據
_xs = [0.1 * x for x in range(0, 10)]
_ys = [12 * i + 4 for i in _xs]
print(_xs)
print(_ys)
w = random.random() #權重
print(w)
b = random.random() #偏置
print(b)
# y=wx+b
a1 = []
b1 = []
for i in range(1):
for x, y in zip(_xs, _ys): #遍歷_xs和_ys
print("x=",x,"y=",y)
o = w * x + b #預測值
print("o=")
e = (o - y) #誤差
print("e=",e)
loss = e ** 2 #平方損失函數
dw = 2 * e * x #對(w*x+b)^2求w的偏導數,梯度
db = 2 * e * 1 #對(w*x+b)^2求b的偏導數,梯度
w = w - 0.1 * dw #梯度下降w
b = b - 0.1 * db #梯度下降b
print('loss={0},w={1},b={2}'.format(loss, w, b))
a1.append(i)
b1.append(loss)
plt.plot(a1, b1)
plt.pause(0.1)
plt.show()
循環10次,損失loss還比較大,w和b里實際值12,4還相差較大
隨着訓練次數的變化Loss值的變化:
循環100次,損失變小,w和b更加接近實際值
隨着訓練次數的變化Loss值的變化:
2.思考線性回歸算法可以用來做什么?
線性回歸算法除了上課時提到的預測房價,預測銷售額,預測貸款額度之外,它也可以用來預測一個人的信用、預測山體滑坡的概率,預測是否交通堵塞等等。
2.自主編寫線性回歸算法 ,數據可以自己造,或者從網上獲取。(加分題)
通過網上獲取:
實現:通過房屋的朝向,建造時間,有無電梯 ,樓層高低,面積㎡,裝修程度以及室廳房情況運用線性回歸算法預測房屋價格
數據來源:
文件為從https://guangzhou.leyoujia.com/esf/樂有家官網爬取的數據
房屋朝向特征化:
南:0
東:1
北:2
西:3
房屋有無電梯特征化:
暫無:0
有電梯:1
房屋樓層特征化:
高樓層:0
中樓層:1
低樓層:2
裝修程度特征化:
普裝:0
精裝:1
毛呸:2
豪裝:3
import pandas from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression import matplotlib.pyplot as plt # 文件為從https://guangzhou.leyoujia.com/esf/樂有家官網爬取的數據 # 201706120019hdfend.csv文件為處理有導出的數據文件 # 房屋朝向特征化: # 南:0 # 東:1 # 北:2 # 西:3 # 房屋有無電梯特征化: # 暫無:0 # 有電梯:1 # 房屋樓層特征化: # 高樓層:0 # 中樓層:1 # 低樓層:2 # 裝修程度特征化: # 普裝:0 # 精裝:1 # 毛呸:2 # 豪裝:3 data =pandas.read_csv('./venv/data/房產信息.csv') x=data.loc[:, ['朝向', '時間', '電梯','樓層','面積㎡', '室', '廳', '房', '裝修程度']] print(x) y=data.iloc[:,9] print(y) # 划分訓練集與測試集 x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.1,random_state=5)#划分訓練集與測試集 print("x的訓練集為:",x_train) print("y的訓練集為:",y_train) # 構建線性LinearRegression回歸模型 LR_model=LinearRegression() LR_model.fit(x_train,y_train) # 訓練模型 print("線性回歸模型構建完成:\n",LR_model) # 用模型調用預測數據,預測結果 LR_pre=LR_model.predict(x_test) print('回歸模型的權值:',LR_model.coef_) print('回歸模型的截距項:',LR_model.intercept_) #繪制線性回歸模型折線圖 plt.rcParams['font.sans-serif'] = 'SimHei' # 設置字體為SimHei顯示中文 plt.rcParams['axes.unicode_minus'] = False # 設置正常顯示字符 p=plt.figure(figsize=(12,30)) # 確定畫布大小 plt.subplot(3,1,1) # 分為三行一列,放在位置1 plt.title("預測結果折線圖") p1=plt.plot(range(y_test.size),y_test,color="#2FBE95") # 繪制真實值折線圖 # bbox_to_anchor(num1,num2)表示legend的位置和圖像的位置關系,num1表示水平位置,num2表示垂直位置。 plt.legend(["預測值"],bbox_to_anchor=(1.01, 0.8), loc=3, borderaxespad=0) # 圖例 plt.subplot(3,1,2) # 分為三行一列,放在位置1 plt.title("真實結果折線圖") plt.plot(range(y_test.size),LR_pre,color="#2A4C68") # 繪制預測值折線圖 plt.legend(["真實值"],bbox_to_anchor=(1.01, 0.8), loc=3, borderaxespad=0) # 圖例 plt.subplot(3,1,3) # 分為三行一列,放在位置1 plt.title("預測與真實值對照折線圖") plt.plot(range(y_test.size),y_test,color="#2FBE95") # 繪制真實值折線圖 plt.plot(range(y_test.size),LR_pre,color="#2A4C68") # 繪制預測值折線圖 plt.legend(["真實值","預測值"],bbox_to_anchor=(1.01, 0.8), loc=3, borderaxespad=0) # 圖例 plt.title("線性回歸模型預測結果") plt.show()
數據詳情
x
目標值y
模型預測結果