10 线性回归入门

10 线性回归入门

线性回归是机器学习中一种基础而重要的算法。它用于预测一个变量(目标变量)与一个或多个其他变量(特征变量)之间的线性关系。本文将详细介绍线性回归的基本概念、实现步骤以及一个具体的案例。

什么是线性回归?

线性回归试图找到一个线性方程,以最佳方式拟合数据点。其基本形式可以表示为:

1
y = β0 + β1*x1 + β2*x2 + ... + βn*xn + ε

其中:

  • y 是目标变量(我们希望预测的值)。
  • β0 是截距(intercept)。
  • β1, β2, ..., βn 是各特征的权重(coefficients)。
  • x1, x2, ..., xn 是特征变量。
  • ε 是误差项(error term)。

线性回归的假设

进行线性回归时,我们通常做以下假设:

  1. 线性关系:目标变量与特征变量之间存在线性关系。
  2. 独立性:特征变量之间相互独立。
  3. 同方差性:误差的方差是常数。
  4. 正态分布:误差项服从正态分布。

线性回归的实现步骤

步骤 1:数据准备
收集并准备数据集,确保数据集包含你希望预测的目标值和特征值。

步骤 2:数据可视化
使用散点图等可视化工具展示特征与目标之间的关系,帮助判断是否存在线性关系。

步骤 3:划分数据集
将数据集分为训练集和测试集,通常按80/20或70/30的比例划分。

步骤 4:建立模型
使用线性回归算法建立模型。

步骤 5:模型训练
通过训练集数据训练模型,调整权重参数。

步骤 6:模型评估
在测试集上评估模型的表现,常用的评估指标有均方误差(MSE)和决定系数(R²)。

步骤 7:预测
使用训练好的模型进行预测。

实际案例:房价预测

以下是一个简单的案例,使用线性回归预测房价。

数据集准备

假设我们有一个房价数据集,包含以下特征:

  • 房间数量(Rooms
  • 房屋面积(Area
  • 房龄(Age
  • 房价(Price

数据导入与可视化

1
2
3
4
5
6
7
8
9
10
11
12
import pandas as pd
import matplotlib.pyplot as plt

# 导入数据
data = pd.read_csv('house_prices.csv')

# 可视化房屋面积与房价的关系
plt.scatter(data['Area'], data['Price'])
plt.title('Area vs Price')
plt.xlabel('Area (sq ft)')
plt.ylabel('Price ($)')
plt.show()

数据划分

1
2
3
4
5
6
7
8
from sklearn.model_selection import train_test_split

# 特征和目标变量
X = data[['Rooms', 'Area', 'Age']]
y = data['Price']

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

建立模型与训练

1
2
3
4
5
6
7
from sklearn.linear_model import LinearRegression

# 创建线性回归模型
model = LinearRegression()

# 训练模型
model.fit(X_train, y_train)

模型评估

1
2
3
4
5
6
7
8
9
10
11
from sklearn.metrics import mean_squared_error, r2_score

# 预测房价
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² Score: {r2}')

预测示例

可以使用训练好的模型进行房价预测:

1
2
3
4
5
# 预测新的房屋数据
new_data = pd.DataFrame({'Rooms': [3], 'Area': [1500], 'Age': [10]})
predicted_price = model.predict(new_data)

print(f'Predicted Price: ${predicted_price[0]:,.2f}')

总结

线性回归是一个强大且易于理解的工具,适用于许多预测任务。通过真实案例的示范,我们了解了如何从数据准备到模型评估的完整过程。希望你能在自己的项目中尝试线性回归,探索数据的潜在模式!

11 逻辑回归入门

11 逻辑回归入门

逻辑回归(Logistic Regression)是一种广泛使用的统计学习方法,主要用于处理二分类问题。尽管名字中含有“回归”,它的实际应用更接近于分类问题。下面将介绍逻辑回归的基本概念、数学原理、实现案例以及如何利用 Python 的 scikit-learn 库进行建模。

逻辑回归的基本概念

逻辑回归通过逻辑函数(Sigmoid 函数)将线性组合转换为概率。假设输入特征为 X,通过线性组合得到 z

1
z = β0 + β1*X1 + β2*X2 + ... + βn*Xn

然后将 z 通过 Sigmoid 函数转换为概率 p

1
p = 1 / (1 + e^(-z))

这里的 e 是自然对数的底数,而 p 可以理解为样本属于某个类别的概率。当 p >= 0.5 时,预测结果为类别1;当 p < 0.5 时,预测结果为类别0。

数学原理

逻辑回归的目标是最大化似然函数(Likelihood),可以表示为:

1
L(β) = ∏(p_i^y_i * (1 - p_i)^(1 - y_i))

其中 y_i 是实际标签。通过对数转换得到对数似然函数:

1
log L(β) = Σ(y_i * log(p_i) + (1 - y_i) * log(1 - p_i))

最终通过优化算法(如梯度下降)来估计参数 β

案例分析:使用逻辑回归预测鸢尾花分类

数据集简介

我们将使用经典的鸢尾花数据集(Iris Dataset),这是一个包含三种鸢尾花(Setosa、Versicolor、Virginica)及其特征的公开数据集。我们将聚焦于前两种花的分类问题,使用逻辑回归进行训练。

数据预处理

首先,我们需要导入必要的库,并进行数据加载和预处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# 加载数据
iris = load_iris()
X = iris.data[iris.target != 2] # 只选择前两类
y = iris.target[iris.target != 2]

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 特征标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

模型训练

接下来,我们将使用 scikit-learnLogisticRegression 模型进行训练。

1
2
3
4
5
6
from sklearn.linear_model import LogisticRegression

# 创建逻辑回归模型
model = LogisticRegression(solver='liblinear')
# 训练模型
model.fit(X_train, y_train)

预测与评估

训练完成后,我们使用模型进行预测并评估其表现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# 进行预测
y_pred = model.predict(X_test)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
confusion = confusion_matrix(y_test, y_pred)
report = classification_report(y_test, y_pred)

print(f'准确率: {accuracy}')
print('混淆矩阵:')
print(confusion)
print('分类报告:')
print(report)

小结

逻辑回归是一个简单而强大的分类工具,通过合理的特征选择和数据预处理,可以构建出高效的分类模型。在本节中,我们通过鸢尾花数据集的案例,学习了逻辑回归的基本原理、实施步骤以及如何评估模型的效果。使用 scikit-learn 使得逻辑回归的实现变得简单且高效,适合小白入门学习机器学习的首选方法。

12 支持向量机简介

12 支持向量机简介

支持向量机(SVM)是一种监督学习模型,通常用于分类问题,也可用于回归分析。它通过寻找最佳的“超平面”来对数据进行分类,使得不同类别的样本点之间的间隔最大化。本文将详细解释支持向量机,并通过案例和代码演示其使用。

支持向量机的基本概念

在支持向量机中,我们试图找到一个超平面(在二维空间中是线,在三维空间中是平面),它能够将数据集中的不同分类分开。这个超平面被选择为使得间隔最大化的超平面,这个间隔是指最近的样本到超平面的距离。

样本点与支持向量

  • 样本点:数据集中的每一个数据点。
  • 支持向量:那些位于超平面边界附近的样本点。支持向量机的决策边界主要受到这些样本点的影响。

支持向量机的数学原理

科学地说,支持向量机的目标是通过以下过程找出最佳的超平面:

  1. 设定一个超平面方程:w ⋅ x + b = 0,其中 w 是法向量,x 是输入特征,b 是偏置。
  2. 最大化两类样本点到超平面的距离(间隔),即:1/||w||

对于线性可分的情况,SVM 通过优化以下目标函数来实现:

$$
\min_{w, b} \frac{1}{2} ||w||^2
$$

$$
\text{subject to } y_i (w ⋅ x_i + b) \geq 1, \forall i
$$

这里,y_i 是样本点的标签(+1 或 -1)。

案例:使用 SVM 进行鸢尾花分类

数据集简介

鸢尾花数据集(Iris dataset)是机器学习中一个经典的数据集,包含三种鸢尾花的特征,分别是花萼长度、花萼宽度、花瓣长度和花瓣宽度。

导入必要的库

1
2
3
4
5
6
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn.metrics import classification_report, confusion_matrix

加载数据并进行预处理

1
2
3
4
5
6
7
# Load the iris dataset
iris = datasets.load_iris()
X = iris.data[:, :2] # 只用前两个特征进行可视化
y = iris.target

# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

训练支持向量机模型

1
2
3
# 创建 SVM 分类器
clf = svm.SVC(kernel='linear') # 使用线性核
clf.fit(X_train, y_train) # 训练模型

预测与评估

1
2
3
4
5
6
# 进行预测
y_pred = clf.predict(X_test)

# 打印分类报告和混淆矩阵
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))

可视化分类边界

1
2
3
4
5
6
7
8
9
10
11
# 绘制决策边界
xx, yy = np.meshgrid(np.linspace(3, 8, 100), np.linspace(1, 5, 100))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
plt.contour(xx, yy, Z, levels=[0], linewidths=2, colors='k')
plt.title('SVM Decision Boundary')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.show()

小结

支持向量机是一种强大的分类方法,尤其在小型数据集上表现良好。通过使用 支持向量 来最大化间隔,SVM 能够有效地找到决策边界。本文通过鸢尾花数据集具体演示了如何使用 SVM 进行分类,包括模型训练、预测以及可视化决策边界的过程。希望通过本教程,你能够对 SVM 有一个初步的理解并能动手实践。