-
線性回歸 -
多項式回歸 -
嶺回歸 -
Lasso回歸 -
彈性網(wǎng)絡(luò)回歸 -
邏輯斯蒂回歸 -
決策樹回歸 -
隨機森林回歸
線性回歸(Linear Regression)
-
是預(yù)測的目標(biāo)變量。 -
是輸入特征。 -
是斜率(簡單線性回歸中)或權(quán)重(多元線性回歸中)。 -
是截距。 -
是多元線性回歸中的權(quán)重。
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# 生成隨機數(shù)據(jù)
np.random.seed(0)
X = np.random.rand(100, 1) # 輸入特征
y = 2 * X + 1 + 0.1 * np.random.randn(100, 1) # 生成輸出數(shù)據(jù),帶有一些噪聲
# 創(chuàng)建線性回歸模型
model = LinearRegression()
# 擬合模型
model.fit(X, y)
# 預(yù)測
y_pred = model.predict(X)
# 繪制原始數(shù)據(jù)和擬合直線
plt.scatter(X, y, label='Original Data')
plt.plot(X, y_pred, color='red', linewidth=3, label='Fitted Line')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.title('Linear Regression Example')
plt.show()
LinearRegression
模型擬合數(shù)據(jù),并繪制了原始數(shù)據(jù)和擬合直線的可視化圖表。多項式回歸(Polynomial Regression)
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
# 生成隨機數(shù)據(jù)
np.random.seed(0)
X = np.sort(5 * np.random.rand(80, 1), axis=0)
y = np.cos(X).ravel() + np.random.randn(80) * 0.1
# 使用多項式特征擴展
poly = PolynomialFeatures(degree=4) # 選擇多項式的階數(shù)
X_poly = poly.fit_transform(X)
# 創(chuàng)建線性回歸模型
model = LinearRegression()
model.fit(X_poly, y)
# 預(yù)測
X_test = np.linspace(0, 5, 100)[:, np.newaxis]
X_test_poly = poly.transform(X_test)
y_pred = model.predict(X_test_poly)
# 繪制原始數(shù)據(jù)和擬合曲線
plt.scatter(X, y, label='Original Data')
plt.plot(X_test, y_pred, label='Polynomial Regression', color='r')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.title('Polynomial Regression Example')
plt.show()
嶺回歸(Ridge Regression)
-
是因變量(目標(biāo)變量)的觀測值。 -
是模型的參數(shù),其中 是截距, 是自變量的系數(shù)。 -
是第 個觀測值的第 個自變量的值。 -
是嶺回歸的超參數(shù),用于控制正則化的強度。
import matplotlib.pyplot as plt
from sklearn.linear_model import Ridge
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import trAIn_test_split
# 生成模擬數(shù)據(jù)集
np.random.seed(0)
n_samples, n_features = 200, 5
X = np.random.randn(n_samples, n_features)
true_coefficients = np.array([4, 2, 0, 0, -1])
y = X.dot(true_coefficients) + np.random.randn(n_samples) * 1.0
# 將數(shù)據(jù)集分為訓(xùn)練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 使用嶺回歸擬合數(shù)據(jù)
alpha = 1.0 # 正則化強度參數(shù)
ridge = Ridge(alpha=alpha)
ridge.fit(X_train, y_train)
# 輸出嶺回歸模型的系數(shù)
print("Ridge Regression Coefficients:", ridge.coef_)
# 計算模型在測試集上的R^2分?jǐn)?shù)
r_squared = ridge.score(X_test, y_test)
print("R-squared:", r_squared)
# 繪制實際值和預(yù)測值的散點圖
plt.scatter(y_test, ridge.predict(X_test))
plt.xlabel("Actual Values")
plt.ylabel("Predicted Values")
plt.title("Ridge Regression: Actual vs. Predicted")
plt.show()
Lasso回歸(Lasso Regression)
-
是樣本數(shù) -
是觀測到的目標(biāo)值 -
是模型預(yù)測的目標(biāo)值 -
是特征的數(shù)量 -
是特征 的系數(shù) -
是正則化參數(shù),控制著正則化的強度。較大的 值將導(dǎo)致更多的特征系數(shù)為零。
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 生成合成數(shù)據(jù)集
X, y = make_regression(n_samples=100, n_features=2, noise=0.5, random_state=42)
# 將數(shù)據(jù)集分為訓(xùn)練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 創(chuàng)建Lasso回歸模型
alpha = 1.0 # 正則化參數(shù)
lasso = Lasso(alpha=alpha)
# 擬合模型
lasso.fit(X_train, y_train)
# 預(yù)測測試集
y_pred = lasso.predict(X_test)
# 計算均方誤差
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse:.2f}")
# 繪制特征系數(shù)
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.scatter(X[:, 0], y, label='Feature 1')
plt.scatter(X[:, 1], y, label='Feature 2')
plt.xlabel('Features')
plt.ylabel('Target')
plt.title('Original Data')
plt.legend()
plt.subplot(1, 2, 2)
plt.bar(['Feature 1', 'Feature 2'], lasso.coef_)
plt.xlabel('Features')
plt.ylabel('Coefficient Value')
plt.title('Lasso Coefficients')
plt.show()
Lasso
回歸對合成數(shù)據(jù)集進(jìn)行建模,并且展示了特征系數(shù)的可視化。Lasso
回歸進(jìn)行特征選擇和建模。彈性網(wǎng)絡(luò)回歸(Elastic.NET Regression)
L1
正則化(Lasso正則化)和L2
正則化(Ridge正則化)的特性,以解決特征選擇和過擬合問題。L1
和L2
正則化項的組合。-
是均方誤差,用來衡量模型預(yù)測值與實際值之間的差距。 -
λ()是正則化參數(shù),用于控制正則化的強度。 -
是L1正則化的項,它是模型系數(shù)的絕對值之和。 -
是L2正則化的項,它是模型系數(shù)的平方和。 -
α()是一個介于0和1之間的參數(shù),用于權(quán)衡 L1
和L2
正則化的貢獻(xiàn)。當(dāng)α時,模型等同于Ridge
回歸,當(dāng)α時,模型等同于Lasso
回歸。
import matplotlib.pyplot as plt
from sklearn.linear_model import ElasticNet
from sklearn.datasets import make_regression
# 生成示例數(shù)據(jù)集
X, y = make_regression(n_samples=100, n_features=1, noise=10, random_state=42)
# 創(chuàng)建彈性網(wǎng)絡(luò)回歸模型
elastic_net = ElasticNet(alpha=0.5, l1_ratio=0.5, random_state=42)
# 擬合模型
elastic_net.fit(X, y)
# 預(yù)測
y_pred = elastic_net.predict(X)
# 繪制原始數(shù)據(jù)和擬合線
plt.scatter(X, y, label='Actual Data', color='b')
plt.plot(X, y_pred, label='Elastic Net Regression', color='r')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.title('Elastic Net Regression')
plt.show()
# 打印模型系數(shù)
print("Elastic Net Coefficients:")
print("Intercept:", elastic_net.intercept_)
print("Coefficient:", elastic_net.coef_)
Intercept: 0.05906898426354079
Coefficient: [33.78639071]
邏輯斯蒂回歸(Logistic Regression)
-
是觀測到類別1的概率。 -
是輸入特征向量。 -
是特征權(quán)重向量。 -
是偏置項。 -
是自然對數(shù)的底數(shù)。
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.preprocessing import StandardScaler
# 生成模擬數(shù)據(jù)
X, y = make_classification(n_samples=1000, n_features=2, n_classes=2, n_clusters_per_class=1, n_redundant=0, random_state=42)
# 數(shù)據(jù)標(biāo)準(zhǔn)化
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 劃分訓(xùn)練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 訓(xùn)練邏輯斯蒂回歸模型
model = LogisticRegression()
model.fit(X_train, y_train)
# 預(yù)測
y_pred = model.predict(X_test)
# 計算準(zhǔn)確率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')
# 繪制決策邊界和數(shù)據(jù)點
xx, yy = np.meshgrid(np.linspace(X[:, 0].min() - 1, X[:, 0].max() + 1, 100),
np.linspace(X[:, 1].min() - 1, X[:, 1].max() + 1, 100))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.RdBu, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.RdBu, marker='o')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Logistic Regression Decision Boundary')
plt.show()
決策樹回歸(Decision Tree Regression)
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor
# 創(chuàng)建一個模擬數(shù)據(jù)集
np.random.seed(0)
X = np.sort(5 * np.random.rand(80, 1), axis=0)
y = np.sin(X).ravel() + np.random.normal(0, 0.1, X.shape[0])
# 訓(xùn)練決策樹回歸模型
regressor = DecisionTreeRegressor(max_depth=5)
regressor.fit(X, y)
# 生成預(yù)測結(jié)果
X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis]
y_pred = regressor.predict(X_test)
# 繪制原始數(shù)據(jù)和決策樹回歸結(jié)果
plt.figure()
plt.scatter(X, y, s=20, edgecolor="black", c="darkorange", label="data")
plt.plot(X_test, y_pred, color="cornflowerblue", linewidth=2, label="prediction")
plt.xlabel("data")
plt.ylabel("target")
plt.title("Decision Tree Regression")
plt.legend()
plt.show()
隨機森林回歸(Random Forest Regression)
-
隨機性:隨機森林采用隨機抽樣技術(shù),從訓(xùn)練數(shù)據(jù)中隨機選擇樣本,并在每個決策樹的節(jié)點上隨機選擇特征,以降低過擬合的風(fēng)險。
-
集成:多個決策樹的預(yù)測結(jié)果被組合,通常采用平均值(對于回歸問題)或投票(對于分類問題)來生成最終的預(yù)測結(jié)果,這有助于降低模型的方差。
-
特征選擇:在構(gòu)建每個決策樹時,隨機森林只考慮特征的隨機子集,從而增加了模型的多樣性。
-
魯棒性:由于隨機森林由多個決策樹組成,它對于噪聲和異常值的魯棒性較高,可以提供更穩(wěn)定的預(yù)測。
-
是隨機森林中的決策樹數(shù)量。 -
是第 個決策樹的預(yù)測值。
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
# 創(chuàng)建一個示例數(shù)據(jù)集
np.random.seed(0)
X = np.sort(5 * np.random.rand(80, 1), axis=0)
y = np.sin(X).ravel() + np.random.rand(80)
# 創(chuàng)建隨機森林回歸模型
rf_regressor = RandomForestRegressor(n_estimators=100, random_state=42)
# 訓(xùn)練模型
rf_regressor.fit(X, y)
# 預(yù)測
X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis]
y_pred = rf_regressor.predict(X_test)
# 計算均方誤差
mse = mean_squared_error(y, rf_regressor.predict(X))
print("Mean Squared Error:", mse)
# 繪制真實值和預(yù)測值的可視化圖表
plt.figure(figsize=(10, 6))
plt.scatter(X, y, s=20, edgecolor="black", c="darkorange", label="data")
plt.plot(X_test, y_pred, color="cornflowerblue", linewidth=2, label="prediction")
plt.xlabel("data")
plt.ylabel("target")
plt.title("Random Forest Regression")
plt.legend()
plt.show()