机器学习的三大要素
机器学习包含三个基本要素:
1. 数据
数据是机器学习的燃料,质量越高、数量越多的数据,通常能让模型学得越好。
- 训练数据:用来教模型的数据
- 测试数据:用来检验模型学习效果的数据
- 真实数据:模型在实际应用中遇到的新数据
2. 算法
算法是机器学习的学习方法,不同的算法适用于不同类型的问题。
- 监督学习:有标准答案的学习
- 无监督学习:没有标准答案,自己找规律
- 强化学习:通过试错和奖励来学习
3. 模型
模型是学习的结果,就像学生学到的知识一样。
-
训练过程:算法从数据中学习规律
-
推理过程:使用学到的规律做预
"""
source https://www.runoob.com/ml/ml-tutorial.html
Scikit-learn 中的线性回归模型,封装了最小二乘法的实现
"""
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
import seaborn as sns
import matplotlibMatplotlib 的图形后端为 TkAgg(基于 Tkinter 的交互式后端)。
这通常在脚本或特定环境下(如某些 IDE 或服务器)需要显式设置,以确保图形窗口正常弹出
如果省略,Matplotlib 会自动选择默认后端。
matplotlib.use('TkAgg')
设置图表风格,让图表更好看
sns.set_style("whitegrid")
---------------------------------------设置中文字体 start---------------------------------------------------------------
plt.rcParams['font.sans-serif'] = [
# Windows 优先
'SimHei', 'Microsoft YaHei',
# macOS 优先
'PingFang SC', 'Heiti TC',
# Linux 优先
'WenQuanYi Micro Hei', 'DejaVu Sans'
]修复负号显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False
1、准备数据
假设我们有房屋面积和对应的价格数据
房屋面积(平方米)特征数据(房屋面积),形状为 (8,)。reshape(-1, 1) 将其转换为列向量,
即 (8, 1) 的二维数组,因为 Scikit-learn 的 fit 方法要求特征输入是二维的(每个样本一行,每个特征一列)
house_sizes = np.array([50, 60, 70, 80, 90, 100, 110, 120]).reshape(-1, 1)
房屋价格(万元)目标数据(房屋价格),是一维数组,形状为 (8,)。线性回归模型接受一维目标。
house_prices = np.array([150, 180, 210, 240, 270, 300, 330, 360])
print(house_sizes)
print(house_prices)2、创建并训练模型
创建线性回归模型 默认参数下,模型会计算截距(intercept)和系数(coefficient),
使用普通最小二乘法(OLS)拟合。
model = LinearRegression()
用数据训练模型(学习面积和价格之间的关系) 模型会根据输入的 house_sizes 和 house_prices
学习两者之间的线性关系:训练完成后,模型内部会保存(截距和斜率)这两个参数。
model.fit(house_sizes, house_prices)
3、使用模型进行预测 输入一个二维数组(或列表),这里 [[85]] 表示一个样本,
一个特征(85 平方米)。输出是一个一维数组,包含预测值。
predicted_price = model.predict([[85]])
print(predicted_price)
print(f"85 平方米的房屋预测价格:{predicted_price[0]:.2f} 万元")print(model.coef_)
print(model.intercept_)4、可视化结果
plt.scatter(house_sizes, house_prices, color='blue', label='实际数据')
plt.plot(house_sizes, model.predict(house_sizes), color='red', label="预测线")plt.scatter([85], predicted_price, color='green', s=100, label="预测点")
plt.xlabel('房屋面积(平方米)')
plt.ylabel('房屋价格(万元)')
plt.legend()
plt.grid(True)
plt.show()
相关知识:reshape(-1,1)
-1 的含义
-1 是一个特殊值,表示自动推断该维度的大小。它只能出现一次,因为如果有多个 -1,NumPy 无法唯一确定每个维度的大小。
例如:
原数组有 8 个元素,reshape(-1, 1) 表示新形状为 (x, 1),其中 x * 1 = 8,所以 x = 8,结果形状为 (8, 1)。
原数组有 8 个元素,reshape(2, -1) 表示新形状为 (2, y),其中 2 * y = 8,所以 y = 4,结果形状为 (2, 4)。
reshape(-1, 1) 的具体作用
当执行 arr.reshape(-1, 1) 时:
将原数组转换为一个二维数组,行数自动计算,列数为 1。
结果是一个列向量:每一行只有一个元素,相当于把一维数组"竖起来"。
model.coef_ 和 model.intercept_ 是线性回归模型训练后自动生成的属性,分别对应模型的系数(斜率)和截距。
-
model.coef_:一个数组,存储每个特征的权重。对于一元线性回归,它只有一个值,表示自变量(房屋面积)每增加一个单位,因变量(价格)平均变化多少。 -
model.intercept_:一个浮点数,表示当所有特征为 0 时的预测值(即回归直线与 y 轴的交点)

地址: https://www.runoob.com/ml/ml-tutorial.html
https://www.runoob.com/ml/ml-tutorial.html