机器学习实战:从零到%1 …
今天聊聊机器学习(Machine Learning, ML),这个听起来高大上的技术其实并没有那么神秘。跟着我的节奏,咱们一起来探索一下如何从零开始!
准备工作:安装和导入必要的库
在开始我们的房价预测项目之前,我们需要准备好开发环境并导入所有必要的库。这些库将帮助我们处理数据、构建模型、评估性能以及可视化结果。
安装Python和Jupyter Notebook
首先,确保你已经安装了Python和Jupyter Notebook。如果你还没有安装,可以通过以下步骤来搞定:
-
下载并安装Anaconda:
- Anaconda是一个非常流行的Python发行版,包含了大多数你需要的科学计算和机器学习库。
- 访问Anaconda官网,下载适合你操作系统的版本。
-
启动Jupyter Notebook:
- 打开终端(Linux/Mac)或命令提示符(Windows)。
- 输入
jupyter notebook
并回车,这将启动Jupyter Notebook服务器并在浏览器中打开一个新窗口。
创建虚拟环境(可选但推荐)
为了确保项目的依赖项不会影响其他项目,建议创建一个虚拟环境:
# 创建一个新的虚拟环境
conda create -n ml_env python=3.8
# 激活虚拟环境
conda activate ml_env
安装必要的库
在你的虚拟环境中,通过以下命令安装所需的库:
pip install numpy pandas scikit-learn matplotlib seaborn jupyter
或者使用conda:
conda install numpy pandas scikit-learn matplotlib seaborn jupyter
导入库并加载数据集
现在我们可以开始编写代码啦!首先,我们需要导入一些必要的库。别担心,我会一步一步带你走。
# 导入基础库
import pandas as pd
import numpy as np
# 导入用于机器学习的库
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
# 导入用于可视化的库
import matplotlib.pyplot as plt
import seaborn as sns
加载波士顿房价数据集
接下来,我们将加载著名的波士顿房价数据集。这个数据集包含了一些关于房子的信息,如房间数、犯罪率等,以及对应的房子价格。
# 加载波士顿房价数据集
boston = load_boston()
# 将数据转换为DataFrame,方便后续处理
data = pd.DataFrame(boston.data, columns=boston.feature_names)
data['PRICE'] = boston.target
# 查看前几行数据
print(data.head())
输出应该类似于这样:
CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX \
0 0.00632 18.0 2.31 0.0 0.538 6.575 65.2 4.0900 1.0 296.0
1 0.02731 0.0 7.07 0.0 0.469 6.421 78.9 4.9671 2.0 242.0
2 0.02729 0.0 7.07 0.0 0.469 7.185 61.1 4.9671 2.0 242.0
3 0.03237 0.0 2.18 0.0 0.458 6.998 45.8 6.0622 3.0 222.0
4 0.06905 0.0 2.18 0.0 0.458 7.147 54.2 6.0622 3.0 222.0
PTRATIO B LSTAT
0 15.3 396.90 4.98
1 17.8 396.90 9.14
2 17.8 392.83 4.03
3 18.7 394.63 2.94
4 18.7 396.90 5.33
数据探索
了解数据是进行任何分析的第一步。我们可以查看数据的基本统计信息,并绘制一些简单的图表来帮助我们理解数据。
# 查看数据的基本统计信息
print(data.describe())
# 绘制房价分布图
plt.hist(data['PRICE'], bins=50)
plt.xlabel('Price in $1000s')
plt.ylabel('Number of houses')
plt.title('Distribution of House Prices')
plt.show()
数据预处理
在实际应用中,数据往往需要经过清洗和预处理。常见的步骤包括缺失值处理、特征缩放等。
# 检查是否有缺失值
print(data.isnull().sum())
# 特征缩放
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data.drop('PRICE', axis=1))
构建模型
现在我们可以选择一个简单的线性回归模型来开始:
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(scaled_data, data['PRICE'], test_size=0.2, random_state=42)
# 创建并训练模型
model = LinearRegression()
model.fit(X_train, y_train)
评估模型
训练完模型后,我们需要评估它的性能:
# 预测测试集
predictions = model.predict(X_test)
# 计算均方误差(MSE)
mse = mean_squared_error(y_test, predictions)
print(f'Mean Squared Error: {mse}')
# 可视化预测结果
plt.scatter(y_test, predictions)
plt.xlabel('Actual Prices')
plt.ylabel('Predicted Prices')
plt.title('Actual vs Predicted Prices')
plt.show()
进阶技巧
当然,这只是入门级别的实践。如果你想进一步提升你的机器学习技能,可以尝试以下几点:
- 交叉验证:使用K折交叉验证来评估模型的稳定性。
- 调参优化:使用网格搜索(Grid Search)或随机搜索(Random Search)来找到最佳超参数组合。
- 集成学习:尝试使用随机森林(Random Forest)、梯度提升(Gradient Boosting)等集成学习方法。