13 回归分析基础

13 回归分析基础

什么是回归分析

回归分析是一种用于研究两个或多个变量之间关系的统计方法。在数据分析中,它可以帮助我们理解“因果关系”,并预测某个变量(因变量)如何受到其他变量(自变量)的影响。

回归分析的类型

  1. 线性回归:主要用于两个变量之间的线性关系。
  2. 多元回归:用于多个自变量与因变量之间的关系。
  3. 逻辑回归:用于分类问题,预测二元结果(例如:是/否)。

线性回归基础

线性回归旨在找到最佳拟合线(回归线),该直线可用以下公式表示:

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

其中:

  • y 是因变量。
  • x1, x2, ..., xn 是自变量。
  • β0 是截距。
  • β1, β2, ..., βn 是各自变量的系数。
  • ε 是误差项。

案例分析:房价预测

假设我们有一个数据集,包含不同房子的面积(size)和对应的房价(price)。我们希望通过线性回归预测房价。

数据准备

1
2
3
4
5
6
7
8
9
import pandas as pd

# 创建例子数据
data = {
'size': [1500, 1600, 1700, 1800, 2400, 3000],
'price': [300000, 320000, 340000, 360000, 560000, 620000]
}

df = pd.DataFrame(data)

数据可视化

在应用回归分析之前,首先可以通过绘图查看数据分布。

1
2
3
4
5
6
7
import matplotlib.pyplot as plt

plt.scatter(df['size'], df['price'], color='blue')
plt.title('House Size vs Price')
plt.xlabel('Size (sq ft)')
plt.ylabel('Price ($)')
plt.show()

拟合线性回归模型

使用scikit-learn库进行线性回归分析。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# 划分训练集和测试集
X = df[['size']]
y = df['price']
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)

# 输出模型的截距和系数
print(f'截距: {model.intercept_}, 系数: {model.coef_}')

模型评估

利用均方误差(MSE)来评估模型的表现。

1
2
3
4
5
6
7
8
from sklearn.metrics import mean_squared_error

# 预测测试集结果
y_pred = model.predict(X_test)

# 计算并输出均方误差
mse = mean_squared_error(y_test, y_pred)
print(f'均方误差: {mse}')

结果解释

根据模型输出的截距系数,我们可以描绘回归方程,实例可能变为:

1
price = 20000 + 120 * size

这意味着每增加一平方英尺,房价平均增加120美元。同时,均方误差可以帮助我们了解模型的预测准确性。

总结

通过本节,我们基本掌握了线性回归的概念及其在实际案例中的应用。回归分析在数据分析中是一个非常强大的工具,可以帮助我们根据已有数据进行预测和决策。继续深入学习多元回归和其他回归类型将扩展我们的分析工具箱。

14 分类模型简介

14 分类模型简介

分类模型是数据分析与机器学习中一种重要的监督学习方法,旨在将输入数据分配到不同的类别或标签中。在处理分类问题时,模型的任务是根据输入特征预测输出的类别。

什么是分类模型?

分类模型的核心是将观察到的数据点(通常是特征的集合)映射到离散的类别标签。它们广泛应用于实际问题,例如:

  • 垃圾邮件检测:将电子邮件分类为“垃圾邮件”或“非垃圾邮件”。
  • 图像识别:将图像分类为“猫”、“狗”或“鸟”。
  • 情感分析:根据文本内容分析情感为“正面”或“负面”。

这些模型通常通过一个训练过程来学习输入数据与输出类别间的关系。

分类模型的工作流程

  1. 数据收集:收集待分类的数据集,包括特征(输入变量)和标签(目标变量)。
  2. 数据预处理:清洗和准备数据,例如处理缺失值、标准化、编码分类变量等。
  3. 选择模型:选择适合的分类算法,例如逻辑回归、决策树、支持向量机等。
  4. 训练模型:使用训练数据集来训练选定的分类模型,使其能够理解特征与类别之间的关系。
  5. 评估模型:通过测试数据集评估模型性能,常用的评估指标包括准确率、精准率、召回率及F1分数。
  6. 部署与预测:将训练好的模型应用于新数据进行分类预测。

常用的分类算法

逻辑回归

逻辑回归是一种基础的分类算法,适用于二分类任务。其输出通过一个逻辑函数(sigmoid函数)将线性组合转换为0到1之间的概率。

案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target

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

# 训练模型
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.2f}")

决策树

决策树是通过树形结构进行决策的模型,它通过特征的选择进行数据划分,最终形成一个树形分类器。

案例

1
2
3
4
5
6
7
8
9
10
11
12
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report

# 训练决策树模型
tree_model = DecisionTreeClassifier()
tree_model.fit(X_train, y_train)

# 预测
y_pred_tree = tree_model.predict(X_test)

# 评估模型
print(classification_report(y_test, y_pred_tree))

评估分类模型的性能

评估分类模型的性能通常采用多个指标,包括:

  • 准确率 (accuracy):正确分类的比例。
  • 精准率 (precision):正确预测为正类的数量与总预测为正类的数量之比。
  • 召回率 (recall):正确预测为正类的数量与实际正类总数之比。
  • F1分数 (F1-score):精准率和召回率的调和平均数,适用于类别不平衡的问题。

小结

分类模型在数据分析中扮演着关键角色,广泛应用于图像识别、文本分类、市场预测等多个领域。通过合理的数据预处理、模型选择和评估方式,可以构建出高效、准确的分类系统。理解和掌握分类模型的基本概念与实践是数据分析师必备的技能之一。

15 模型评估与选择

15 模型评估与选择

在数据分析中,模型评估与选择是至关重要的步骤。一个好的模型不仅能够在训练集上表现良好,而且必须在未见过的数据上也能够保持良好的性能。以下内容将涵盖模型评估的基本概念、工具以及实践案例。

1. 模型评估的基本概念

模型评估的核心在于了解模型在真实场景中的表现。评估指标通常包括:

  • 准确率 (Accuracy): 正确分类的样本占总样本的比例。
  • 精确率 (Precision): 预测为正的样本中实际为正的比例。
  • 召回率 (Recall): 实际为正的样本中被预测为正的比例。
  • F1 分数 (F1 Score): 精确率和召回率的调和平均数,一个综合性能指标。
  • ROC 曲线: 受试者工作特征曲线,用于可视化二分类模型的性能,结合 AUC 值评估模型的整体能力。

2. 交叉验证

使用交叉验证 (Cross-Validation) 是评估模型稳健性的一种有效方法,能有效避免模型的过拟合。最常用的交叉验证方式是 k-fold 交叉验证。

案例代码

下面是使用 sklearn 库进行 k-fold 交叉验证的 Python 示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.ensemble import RandomForestClassifier

# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target

# 创建模型
model = RandomForestClassifier(n_estimators=100)

# 进行k折交叉验证
scores = cross_val_score(model, X, y, cv=5) # 使用5折交叉验证

# 打印每一折的准确率
print("每一折的准确率:", scores)
print("平均准确率:", scores.mean())

3. 模型选择

在选择模型时,考虑以下几点:

  • 数据的特性: 数据是线性可分还是非线性可分,这会影响你选择的模型。
  • 业务需求: 某些情况下,可能更重视精确率而非召回率,或者反之。
  • 模型的复杂度: 较复杂模型如深度学习可能在大数据场景下表现优越,但需要更长的训练时间和更多的计算资源。

4. 比较不同模型

通过对多个模型的评估,可以选择最优模型。比较时可以使用相同的数据集和性能指标。

案例代码

使用 sklearn 比较不同模型的性能示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建模型
models = {
'Random Forest': RandomForestClassifier(),
'SVM': SVC(),
'Logistic Regression': LogisticRegression(max_iter=200)
}

# 评估每个模型
for name, model in models.items():
model.fit(X_train, y_train)
predictions = model.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
print(f"{name} 的准确率: {accuracy:.2f}")

5. 超参数调优

在模型训练前,超参数的选取也影响模型的表现。使用网格搜索 (Grid Search) 或随机搜索 (Random Search) 可以找到最优的超参数组合。

案例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
from sklearn.model_selection import GridSearchCV

# 定义超参数范围
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [None, 10, 20, 30]
}

grid_search = GridSearchCV(RandomForestClassifier(), param_grid, cv=5)
grid_search.fit(X_train, y_train)

print("最优参数:", grid_search.best_params_)
print("最优准确率:", grid_search.best_score_)

总结

模型评估与选择是数据分析中不可或缺的环节。通过合理的评估指标、交叉验证、模型比较和超参数调优,可以有效找到适合的模型并确保其在实际应用中的表现。在实际工作中,持续优化和迭代是提升模型性能的关键。