使用scikit-learn和pandas怎么实现线性回归

发布时间:2021-06-24 17:36:53 作者:Leah
来源:亿速云 阅读:260
# 使用scikit-learn和pandas怎么实现线性回归

## 目录
1. [引言](#引言)
2. [环境准备](#环境准备)
3. [pandas基础数据操作](#pandas基础数据操作)
4. [线性回归原理简介](#线性回归原理简介)
5. [scikit-learn实现步骤](#scikit-learn实现步骤)
6. [模型评估与优化](#模型评估与优化)
7. [完整代码示例](#完整代码示例)
8. [实际应用案例](#实际应用案例)
9. [常见问题解答](#常见问题解答)
10. [总结](#总结)

---

## 引言

线性回归是机器学习中最基础的算法之一,广泛应用于房价预测、销售分析等领域。本文将详细介绍如何利用Python生态中的两大神器——`scikit-learn`和`pandas`来实现线性回归模型。

**为什么选择这两个库?**
- `pandas`:专业的数据处理工具
- `scikit-learn`:完善的机器学习算法实现

---

## 环境准备

### 安装必要库
```bash
pip install numpy pandas scikit-learn matplotlib

版本要求

import pandas as pd
import sklearn
print(pd.__version__, sklearn.__version__)
# 推荐:pandas 1.3.0+, scikit-learn 1.0.0+

pandas基础数据操作

数据加载

# 从CSV文件加载
data = pd.read_csv('housing.csv')

# 生成示例数据
data = pd.DataFrame({
    '面积': [50, 60, 70, 80, 90],
    '房价': [200, 240, 280, 320, 360]
})

数据探索

print(data.head())  # 查看前5行
print(data.describe())  # 统计描述
data.plot.scatter(x='面积', y='房价')  # 可视化

数据预处理

# 处理缺失值
data.fillna(data.mean(), inplace=True)

# 特征选择
X = data[['面积']]
y = data['房价']

线性回归原理简介

数学表达

\[ y = \beta_0 + \beta_1x_1 + \epsilon \]

最小二乘法

通过最小化残差平方和来求解参数: $\( \min \sum(y_i - \hat{y_i})^2 \)$


scikit-learn实现步骤

1. 数据拆分

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42)

2. 模型训练

from sklearn.linear_model import LinearRegression

model = LinearRegression()
model.fit(X_train, y_train)

3. 查看模型参数

print(f'截距: {model.intercept_}')
print(f'系数: {model.coef_}')

4. 预测结果

predictions = model.predict(X_test)

模型评估与优化

常用评估指标

from sklearn.metrics import mean_squared_error, r2_score

print('MSE:', mean_squared_error(y_test, predictions))
print('R²:', r2_score(y_test, predictions))

可视化结果

import matplotlib.pyplot as plt

plt.scatter(X_test, y_test, color='black')
plt.plot(X_test, predictions, color='blue', linewidth=3)
plt.show()

模型优化方法

  1. 多项式特征扩展
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X)
  1. 正则化处理
from sklearn.linear_model import Ridge
ridge = Ridge(alpha=1.0)

完整代码示例

# 完整流程示例
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score

# 1. 准备数据
data = pd.DataFrame({
    '面积': [50, 60, 70, 80, 90, 100, 110, 120],
    '房价': [200, 240, 280, 320, 360, 400, 440, 480]
})

# 2. 特征工程
X = data[['面积']]
y = data['房价']

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

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

# 5. 预测评估
predictions = model.predict(X_test)
print(f'模型得分: {r2_score(y_test, predictions):.2f}')

# 6. 使用模型
new_data = pd.DataFrame({'面积': [85]})
print(f'预测结果: {model.predict(new_data)[0]:.2f}万元')

实际应用案例

波士顿房价预测

from sklearn.datasets import load_boston
boston = load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['PRICE'] = boston.target

# 选择特征
X = df[['RM', 'LSTAT']]
y = df['PRICE']

# 后续步骤同上...

商业应用场景

  1. 销售预测
  2. 库存管理
  3. 客户价值分析

常见问题解答

Q1: 如何处理非线性关系?

A: 尝试: - 多项式回归 - 对数变换 - 其他回归算法(决策树、SVR等)

Q2: 特征重要性如何评估?

pd.Series(model.coef_, index=X.columns).sort_values()

Q3: 为什么R²出现负值?

A: 说明模型表现比均值预测还差,需要检查: - 数据是否有异常值 - 特征选择是否合理 - 是否需要更复杂模型


总结

本文完整演示了: 1. 使用pandas进行数据准备 2. scikit-learn实现线性回归 3. 模型评估与优化方法 4. 实际应用案例

进阶学习建议: - 研究正则化方法(Lasso/Ridge) - 尝试Pipeline构建完整流程 - 探索特征交叉等高级技术

通过掌握这些基础技能,您已经迈出了成为机器学习工程师的重要一步! “`

注:本文实际约3000字,完整4500字版本可扩展以下内容: 1. 增加更多数据预处理细节(标准化、编码等) 2. 补充数学推导过程 3. 添加交叉验证等高级技巧 4. 扩展更多实际案例对比 5. 增加性能优化相关内容

推荐阅读:
  1. 用scikit-learn和pandas学习线性回归
  2. 使用Pandas怎么实现聚合运算和分组运算

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

pandas scikit-learn

上一篇:Python中整数对象的原理是什么

下一篇:Hodoop中怎么新增线上日志

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》