# 多項式
import numpy as np
x = 6*np.random.rand(100,1) -3
y = 2 + 0.5 * x ** 2 + x + np.random.rand(100, 1)
import matplotlib.pyplot as plt
plt.style.use('ggplot')
plt.scatter(x, y, s=2, c='red',alpha=0.7)
plt.show()
# 擬合多項式
from sklearn.preprocessing import polynomialfeatures
poly_features = polynomialfeatures(degree=2, include_bias=false)
x_ploy = poly_features.fit_transform(x)
## 用將特徵裝換為 x的一次和x的二次
from sklearn.linear_model import linearregression
lr = linearregression()
lr.fit(x_ploy, y)
lr.intercept_, lr.coef_
# 圖示
畫出模型在訓練集上的表現,同時畫出訓練規模自變數的訓練集函式。
為了得到影象,需要在訓練集的不同規模子集上進行多次訓練
欠擬合def plot_learning_curves(model, x, y):
當加入一些新的樣本的時候,訓練集的擬合程度變的難以接受:
原因一:資料中含有雜訊,
原因二:資料根本不是線性的
隨著著資料規模的增大,誤差也會一直增大,直到達到高原地帶並趨於穩定,
在之後,繼續加入新的樣本,模型的平均誤差不會變得更好或者更差
過擬合
from sklearn.pipeline import pipeline
ploynomial_regression = pipeline((
('poly_reg', polynomialfeatures(degree=10, include_bias=false)), # 高階多項擬合
在訓練集上,誤差要比線性回歸模型低的多。
圖中的兩條曲線之間有間隔,這意味模型在訓練集上的表現要比驗證集上好的多,這也是模型過擬合的顯著特點。當然,如果你使用了更大的訓練資料,這兩條曲線最後會非常的接近。
偏差與方差, 過擬合與欠擬合 學習曲線之間的聯絡
學習曲線就是通過畫出不同訓練集大小時訓練集和交叉驗證的準確率,可以看到模型在新資料上的表現,進而來判斷模型是否方差偏高或偏差過高,以及增大訓練集是否可以減小過擬合。如何判別乙個模型是過擬合還是欠擬合,是偏差問題還是方差問題?可以通過學習曲線來判斷。從總體趨勢上來看,訓練集的準確率是逐漸減低的,測試集...
機器學習(十六)欠擬合與過擬合
問題 訓練資料訓練的很好啊,誤差也不大,為什麼在測試集上面有問題呢?當演算法在某個資料集當 現這種情況,可能就出現了過擬合現象。那麼是什麼原因導致模型複雜?線性回歸進行訓練學習的時候變成模型會變得複雜,這裡就對應前面再說的線性回歸的兩種關係,非線性關係的資料,也就是存在很多無用的特徵或者現實中的事物...
機器學習(13)欠擬合與過擬合
應用 當演算法在某個資料集當 現這種情況,可能就出現了過擬合現象。那麼是什麼原因導致模型複雜?線性回歸進行訓練學習的時候變成模型會變得複雜,這裡就對應前面再說的線性回歸的兩種關係,非線性關係的資料,也就是存在很多無用的特徵或者現實中的事物特徵跟目標值的關係並不是簡單的線性關係。過擬合原因以及解決辦法...