目录
引言
在上一章节,介绍了Python的基础知识,帮助你了解了变量、数据类型、函数等。已经初步熟悉编写和运行Python代码的基本技能,本章节介绍机器学习相关知识及应用
(一)机器学习基础
机器学习是人工智能的一个分支,旨在让计算机从数据中学习并做出预测或决策。这里将从基础概念入手,结合简单的代码例子,带你一步步学习机器学习。
1、基本概念
数据集:训练机器学习模型的数据,通常分为训练集和测试集
特征:用于预测目标值的输入变量
目标值:模型试图预测的输出
模型:从数据中学习到的数学表示,用于做出预测
(二)简单线性回归
上章节已对线性回归做详细的介绍,本章节再次使用一个简单的例子来说明机器学习的基本步骤。假设我们有一些关于一个省份房子的面积和价格的数据,我们想预测新的房子的价格。
2.1、导入必要的库
import numpy as np # 导入数值计算库
import matplotlib.pyplot as plt # 导入绘图库
from sklearn.model_selection import train_test_split # 导入数据集划分工具
from sklearn.linear_model import LinearRegression # 导入线性回归模型
from sklearn.metrics import mean_squared_error # 导入均方误差计算工具
2.2、准备数据
# 生成一些模拟数据
np.random.seed(0) # 设置随机种子以确保结果可复现
X = 2 * np.random.rand(100, 1) # 生成100个房子面积的随机数据点
y = 6 + 3 * X + np.random.randn(100, 1) # 房子价格(目标值)
# 将数据集分为训练集和测试集
#random_state是确保每次运行时分割结果相同
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
np.random.send(0) 代码解析:
是用来设置 NumPy 的随机数生成器的种子。
简单来说:
就比如一本厚厚的电话簿。你随便打开一页,然后从这一页开始读号码。这本书里有很多号码,但如果你每次都从同一页开始读,你每次读到的号码顺序都是一样的。随机数种子就像告诉计算机“从哪一页开始读”的书签。
设置随机数种子的目的:
在编程中,有时候我们希望每次运行代码时得到相同的随机数序列。这样做可以帮助我们在调试代码或分享结果时确保一致性。
代码实例:
import numpy as np
# 不设置随机数种子
random_numbers_1 = np.random.rand(5)
print("第一次生成的随机数:", random_numbers_1)
# 再次生成随机数,没有设置种子
random_numbers_2 = np.random.rand(5)
print("第二次生成的随机数:", random_numbers_2)
# 设置随机数种子为0
np.random.seed(0)
random_numbers_3 = np.random.rand(5)
print("设置种子为0生成的随机数:", random_numbers_3)
# 再次设置相同的随机数种子为0
np.random.seed(0)
random_numbers_4 = np.random.rand(5)
print("再次设置种子为0生成的随机数:", random_numbers_4)
运行结果:
第一次生成的随机数: [0.5488135 0.71518937 0.60276338 0.54488318 0.4236548 ]
第二次生成的随机数: [0.64589411 0.43758721 0.891773 0.96366276 0.38344152]
设置种子为0生成的随机数: [0.5488135 0.71518937 0.60276338 0.54488318 0.4236548 ]
再次设置种子为0生成的随机数: [0.5488135 0.71518937 0.60276338 0.54488318 0.4236548 ]
np.random.rand(100, 1) 代码解释:
将生成一个形状为 的二维数组,其中包含100个随机数,每个随机数在 [0, 1) 范围内。输出结果为一个100行1列的二维数组。(上章节已经提到,在某些机器学习算法(如线性回归)中,输入数据通常被要求是二维数组)
以下为输出结果:
import numpy as np
# 生成一个形状为 (10, 1) 的二维数组,包含10个随机数,每个随机数在 [0, 1) 范围内
random_numbers = np.random.rand(10, 1)
print(random_numbers)
输出结果:
[[0.41919451]
[0.6852195 ]
[0.20445225]
[0.87811744]
[0.02738759]
[0.67046751]
[0.4173048 ]
[0.55868983]
[0.14038694]
[0.19810149]]
np.random.rand生成随机数常用常用函数库:
np.random.randint 可以生成指定范围内的随机整数
np.random.randn 可以生成负数,并且数值会围绕 0 分布
np.random.rand 生成 [0, 1) 范围内的均匀分布的随机数。
2.3、训练模型
# 创建线性回归模型实例
lin_reg = LinearRegression()
# 用训练集数据训练模型
lin_reg.fit(X_train, y_train)
2.4、做出预测
# 用测试集数据做出预测
#y_pred为预测出结果
y_pred = lin_reg.predict(X_test)
2.5、评估模型
# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f"均方误差: {mse}")
均方误差(Mean Squared Error, MSE)是一个常用的评价回归模型预测效果的指标。它量化了预测值与实际值之间的差异。均方误差越小,表示模型的预测结果与实际值越接近。
2.6、可视化结果
# 绘制数据点和预测线
plt.scatter(X, y, color='blue', label='数据点')
plt.plot(X_test, y_pred, color='red', label='预测线')
plt.xlabel('房子面积')
plt.ylabel('房子价格')
plt.legend()
plt.show()
可视化结果展示:
(三)总结
通过线性回归简单的例子,我们介绍了机器学习的基本步骤:准备数据、训练模型、做出预测和评估模型,可进一步深入了解机器学习。