天天看點

【機器學習】一進制線性回歸

1.一進制線性回歸是學習機器學習的基礎部分。通常的問題模型是:問題的結果一般隻有一個因素影響(怎麼可能在現實的生活中找到這麼簡單的問題???)并且和這個因子成近似線性的關系。我們可以通過線性回歸來找到這條回歸直線,進而可以預測到下一步的結果。由于我們需要把資料可視化掉,是以我們還是先看看基本的可視化資料的一些東西。

(1)首先這是我們的資料:可以自己造資料

【機器學習】一進制線性回歸

(2)我們要把這些資料讀出來,使用numpy讀取資料:

from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt
data=np.genfromtxt("D:/ML/data.csv",delimiter=',')
x_data=data[:,0]
y_data=data[:,1]      

當然了,一般都是pandas和numpy結合使用來實作資料的載入:

#pandas讀取以及寫入檔案
import pandas as pd
file=pd.read_csv("D:/ML/data.csv")
print(file)
修改後b儲存
file.iloc[2,0]=0
file.to_csv("D:/ML/newdata.csv")      

(3)讀取資料之後,我們需要畫圖顯示資料,先學習一下基本的畫圖功能。畫圖我們使用matplotlib這個包中的plot。

#圖像
import matplotlib.pyplot as plt
import numpy as np
import math
x=np.linspace(-3,3,100)
y1=2*x+1
y2=x**2
plt.figure(figsize=(10,10))
plt.plot(x,y1)

plt.figure(figsize=(8,8))
plt.plot(x,y2)
plt.show()      

我們可以先用這幾行代碼來畫一下簡單的圖,比如直線或者曲線等。解釋一下這裡面的figure,figure是一個畫布,如果不建立畫布,就會預設的畫在一個畫布上。當然了,這個圖還是很粗糙的,我們可以加一些控制。

#限制坐标的範圍
# 這樣設定以後就會顯示指定坐标範圍的圖像
plt.xlim((-1,2))
plt.ylim((-2,3))

#對xy的坐标進行描述
plt.xlabel("The x axis")
plt.ylabel("The y axis")
plt.plot(x,y1,color='red')
plt.plot(x,y2,color='blue')
plt.show()

# 散點圖
plt.scatter(np.arange(0,4),np.arange(0,4))
plt.show()

x=np.random.normal(0,1,500)
y=np.random.normal(0,1,500)
# 透明度
plt.scatter(x,y,s=50,c='b',alpha=0.5)
plt.show()
#直方圖

x=np.arange(10)
y=2**x+10
# 傳入資料并且指定顔色
plt.bar(x,y,facecolor='blue')
for x,y in zip(x,y):
    plt.text(x,y,'%.2f' %y,ha='center')
plt.show()      

好了,有了上邊的基礎,接下來我們就可以完整的寫一個線性回歸的代碼了。首先我們需要知道線性回歸是怎麼實作的,這個其實很簡單,就是最小二乘法。其實最小二乘法是梯度下降法的一種特殊形式,我們在多元線性回歸的分析中使用的也是這種方法,梯度下降法呢,這個需要一定的數學基礎,梯度在數學裡面一般值的是一個向量,意思就是沿着這個方向,函數的變化是最快的。高數裡面其實有着更加嚴格的定義。不過很好的是,python中有一個skearn庫,這裡面封裝了很多的常用的機器學習算法,我們可以直接調用(PS:這裡還是建議不懂梯度下降的小夥伴去學習一下算法原理,如果懂一點高數大概10分鐘就看懂了,隻會調庫是不行滴。)下面就結合着我們上邊給出的一個表格中的資料來做一下回歸:

from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt
data=np.genfromtxt("D:/ML/data.csv",delimiter=',')
x_data=data[:,0]
y_data=data[:,1]
# 做出散點圖看一下
plt.scatter(x_data,y_data)
# 設定坐标軸
plt.xlabel("Num")
plt.ylabel("Money")
# 給坐标加上次元。
x_data=data[:,0,np.newaxis]
y_data=data[:,1,np.newaxis]
# 建立一個model對象
model=LinearRegression()
# 填充資料
model.fit(x_data,y_data)
# 顯示資料繪制圖像
plt.plot(x_data,model.predict(x_data),'r')
plt.show()      

得到的效果圖如下:

【機器學習】一進制線性回歸

中間的那條紅色的直線就是我們的回歸直線。當然了,我們還可以做更加多的工作,比如檢視這個直線的方程什麼的,使用直線做出預測等。當然了,一進制線性回歸看上去可能是比較簡單,但是回歸的思想是很多回歸算法的基礎。是以初學者還是需要加深了解。