如何判断机器学习数据集是否是线性的?
https://www.toutiao.com/a6643756436406944259/
?
2019-01-07 22:08:07
首先,線性和非線性函數之間的區別:
(左)線性函數(右)非線性函數
線性函數:可以簡單定義為始終遵循以下原則的函數:
輸入/輸出=常數。
線性方程總是1次多項式(例如x+2y+3=0)。在二維情況下,它們總是形成直線;在其他維度中,它們也可以形成平面、點或超平面。它們的“形狀”總是筆直的,沒有任何曲線。這就是為什么我們叫它們線性方程。
非線性函數:即函數圖像不是一條直線的函數。高階多項式是非線性的。三角函數(如sin或cos)是非線性的。平方根是非線性的。
我們如何找到機器學習數據集是否是線性呢?如果我們只有一個維度,那么圖形很簡單,但是如何處理多維機器學習數據集呢?
生成一個線性數據集
數據集的圖形
正如我們在上面的圖中所看到的,從圖中得到一個函數是否是線性的并不總是那么簡單。
問:我們如何解決呢?
因此,我們的想法是將簡單的線性回歸應用于數據集,然后檢查最小平方誤差。如果最小平方誤差顯示高準確度,則意味著機器學習數據集本質上是線性的,否則數據集是非線性的。
好吧,讓我們來看看Python代碼:
從線性機器學習數據集開始:
# General imports import numpy as np import pandas as pd import matplotlib.pyplot as plt # Generating data X = np.random.randn(100,1) c = np.random.uniform(-10,10,(100,)) # adding another linear column X = np.hstack((X, 4*X)) Y = (4*X[:,1] + c) plt.scatter(X[:, 0], Y) plt.show() plt.scatter(X[:, 1], Y) plt.show() # Applying linear reg from sklearn.linear_model import LinearRegression regressor = LinearRegression().fit(X, Y) # Checking the accuracy from sklearn.metrics import r2_score print(r2_score(regressor.predict(X), Y))?
輸出:
Graph of the first column with y
Graph of the second column with y
R2準確度得分約為84%
非線性機器學習數據集:
# General imports import numpy as np import pandas as pd import matplotlib.pyplot as plt # Generating data X = np.random.randn(100,1) c = np.random.uniform(-10,10,(100,)) # adding another non-linear column X = np.hstack((X, X*X)) Y = (4*X[:,1] + c) plt.scatter(X[:, 0], Y) plt.show() plt.scatter(X[:, 1], Y) plt.show() # Applying linear reg from sklearn.linear_model import LinearRegression regressor = LinearRegression().fit(X, Y) # Checking the accuracy from sklearn.metrics import r2_score print(r2_score(regressor.predict(X), Y))?
輸出:
Graph of the first column with y
Graph of the second column with y
R2準確度得分約為-122%
不用說,這是非常不理想的準確度得分。雖然整個代碼幾乎相同,但我們可以看到非線性的增加對準確度得分有非常深遠的影響。
在開始使用機器學習數據集之前,在小型驗證集上使用簡單Python代碼來檢查機器學習數據集是否為線性,可以節省大量的時間。
總結
以上是生活随笔為你收集整理的如何判断机器学习数据集是否是线性的?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matplotlib之简单动画制作
- 下一篇: FLTK学习笔记1-绘制基本控件(按钮、