线性回归(Linear Regression)
原理
线性回归是一种统计方法,用于研究因变量(目标变量)与一个或多个自变量(特征变量)之间的线性关系。它通过拟合一条直线(或一个平面,在多维情况下)来最小化预测值与实际值之间的误差。
线性回归有两种形式:
- 简单线性回归:仅涉及一个自变量。
- 多元线性回归:涉及多个自变量。
公式
线性回归模型的公式如下:
其中:
- y 是因变量。
- β0 是截距(intercept)。
- β1,β2,⋯,βn 是各自变量的回归系数。
- x1,x2,⋯,xn 是自变量。
- ϵ 是误差项。
通过最小化误差平方和(Ordinary Least Squares, OLS),可以估计回归系数。
生活场景应用的案例
房价预测:假设我们有一个包含房屋面积、房龄、房间数等特征的数据集,我们可以使用线性回归模型来预测房价。
代码解析
下面是一个使用Python实现线性回归的示例,使用了scikit-learn
库。
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
# 生成示例数据
np.random.seed(42)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建线性回归模型并训练
model = LinearRegression()
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估模型
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"Mean Squared Error: {mse}")
print(f"R-squared: {r2}")
# 打印回归系数
print("Intercept:", model.intercept_)
print("Coefficient:", model.coef_)
# 可视化
plt.scatter(X_test, y_test, color='blue', label='Actual')
plt.plot(X_test, y_pred, color='red', linewidth=2, label='Predicted')
plt.xlabel('Feature')
plt.ylabel('Target')
plt.legend()
plt.show()
在这个示例中:
- 我们生成了一些随机数据作为示例。
- 将数据集拆分为训练集和测试集。
- 使用训练集训练线性回归模型。
- 通过测试集进行预测并评估模型的性能。
- 输出均方误差(MSE)和R平方值(R-squared)作为模型评估指标。
- 通过绘制数据点和回归直线来直观地理解模型的效果。
逻辑回归(Logistic Regression)
原理
逻辑回归是一种分类算法,尽管其名称中带有“回归”。它用于预测一个事件发生的概率,通过对数几率(log-odds)的线性组合来建模。逻辑回归通常用于二分类问题,但也可以扩展到多分类问题。
逻辑回归模型的核心是Sigmoid函数,它将线性组合的结果转换为概率值:
其中 z=β0+β1x1+β2x2+⋯+βnxn
公式
逻辑回归的公式为:
其中:
- P(y=1∣x) 是事件 y=1 发生的概率。
- β0,β1,⋯,βn是模型的参数(权重)。
- x1,x2,⋯,xn 是自变量(特征)。
生活场景应用的案例
垃圾邮件分类:逻辑回归常用于电子邮件的垃圾分类。假设我们有一个电子邮件数据集,每封邮件都有一些特征(如是否包含特定关键词、发件人地址等),我们可以使用逻辑回归模型来预测邮件是否为垃圾邮件。
案例描述
假设我们有一个电子邮件数据集,其中每封邮件都有若干特征,如:
- 是否包含特定关键词(如“免费”、“促销”等)。
- 发件人地址是否在黑名单中。
- 邮件长度。
我们希望通过这些特征预测邮件是否为垃圾邮件。我们可以将这些特征作为自变量,将邮件的标签(垃圾邮件或非垃圾邮件)作为因变量,使用逻辑回归模型进行训练和预测。模型训练完成后,我们可以使用它来预测新邮件是否为垃圾邮件,并评估模型的性能。
代码解析
下面是一个使用Python实现逻辑回归的示例,使用了scikit-learn
库。
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
# 生成示例数据
X, y = make_classification(n_samples=1000, n_features=10, n_informative=2, n_redundant=2, random_state=42)
# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建逻辑回归模型并训练
model = LogisticRegression()
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估模型
accuracy = accuracy_score(y_test, y_pred)
cm = confusion_matrix(y_test, y_pred)
report = classification_report(y_test, y_pred)
print(f"Accuracy: {accuracy}")
print("Confusion Matrix:")
print(cm)
print("Classification Report:")
print(report)
# 可视化
plt.figure(figsize=(8, 6))
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, marker='o', label='Actual', alpha=0.5)
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred, marker='x', label='Predicted', alpha=0.5)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.show()
在这个示例中:
- 我们生成了一个包含10个特征的二分类数据集。
- 将数据集拆分为训练集和测试集。
- 使用训练集训练逻辑回归模型。
- 通过测试集进行预测并评估模型的性能。
- 输出准确率(accuracy)、混淆矩阵(confusion matrix)和分类报告(classification report)。
- 通过绘制实际标签和预测标签的数据点来可视化分类结果。