很多时候我们学习AI的时候会用到很多第三方库,那么是不是可以不用库就能来联系AI算法呢?当然。
以下是几个可以用 Python 实现的简单 AI 算法,它们不依赖于外部库,适合初学者来理解这些算法:
1. 线性回归(Linear Regression)
线性回归是最简单的回归算法,目标是通过一条直线拟合数据。通过最小二乘法来找出最优的线性关系。
应用场景:
-
预测任务: 线性回归是最简单的回归模型之一,常用于预测数值型目标变量。例如:
- 房价预测: 根据面积、位置、房龄等特征预测房屋价格。
- 销售预测: 根据广告预算、季节性、促销活动等因素预测产品销售额。
- 气温预测: 根据历史气象数据预测未来的气温。
-
趋势分析: 用于寻找数据中的线性趋势,揭示变量之间的线性关系。例如:
- 股票市场分析: 根据历史股价数据分析和预测未来股价走势。
-
风险评估: 在金融、保险等领域使用线性回归模型评估风险。例如:
- 信用评分: 根据个人信用历史预测信用分数。
- 保险定价: 根据个人健康状况、年龄、历史理赔等因素评估投保人风险。
优点:
- 简单直观,易于理解和实现。
- 对于线性关系的数据效果较好。
局限:
- 对于数据中存在非线性关系的任务,线性回归表现较差。
import random
# 创建一些简单的数据
data = [(x, 2*x + 1 + random.uniform(-1, 1)) for x in range(10)]
# 计算平均值
mean_x = sum(x for x, y in data) / len(data)
mean_y = sum(y for x, y in data) / len(data)
# 计算斜率(slope)和截距(intercept)
numerator = sum((x - mean_x) * (y - mean_y) for x, y in data)
denominator = sum((x - mean_x) ** 2 for x, y in data)
slope = numerator / denominator
intercept = mean_y - slope * mean_x
print(f"斜率: {slope}, 截距: {intercept}")
# 使用计算得到的斜率和截距来预测
def predict(x):
return slope * x + intercept
# 测试预测
for x, y in data:
print(f"真实值: {y}, 预测值: {predict(x)}")
解释:
- 生成简单的线性数据,添加了噪声。
- 使用最小二乘法计算斜率(slope)和截距(intercept),然后进行预测。
为了让结果可视化,我们加入一个图片展示:
下面是将线性回归的结果可视化的代码,包括绘制数据点和拟合的直线。为了绘制图形,我们使用 matplotlib
库来生成图表,但不需要其他复杂的库,只需要 matplotlib
来显示图形。
如果你没有安装 matplotlib
,可以通过以下命令安装:
pip install matplotlib
线性回归与可视化
import random
import matplotlib.pyplot as plt
# 创建一些简单的数据
data = [(x, 2*x + 1 + random.uniform(-1, 1)) for x in range(10)]
# 计算平均值
mean_x = sum(x for x, y in data) / len(data)
mean_y = sum(y for x, y in data) / len(data)
# 计算斜率(slope)和截距(intercept)
numerator = sum((x - mean_x) * (y - mean_y) for x, y in data)
denominator = sum((x - mean_x) ** 2 for x, y in data)
slope = numerator / denominator
intercept = mean_y - slope * mean_x
# 使用计算得到的斜率和截距来预测
def predict(x):
return slope * x + intercept
# 可视化数据点
x_data = [x for x, y in data]
y_data = [y for x, y in data]
# 绘制数据点
plt.scatter(x_data, y_data, color='blue', label='Data points')
# 绘制拟合的线性回归线
x_range = range(min(x_data), max(x_data)+1)
y_range = [predict(x) for x in x_range]
plt.plot(x_range, y_range, color='red', label=f'Linear fit: y = {slope:.2f}x + {intercept:.2f}')
# 添加标题和标签
plt.title('Linear Regression')
plt.xlabel('X')
plt.ylabel('Y')
# 显示图例
plt.legend()
# 显示图形
plt.show()
代码解释:
- 数据生成: 我们生成了一些
(x, y)
数据点,其中y
是根据线性关系y = 2x + 1
生成的,但加入了一些随机噪声。 - 线性回归计算: 使用最小二乘法来计算直线的斜率(slope)和截距(intercept)。
- 绘制图形:
- 使用
matplotlib.pyplot.scatter
绘制原始数据点。 - 使用
matplotlib.pyplot.plot
绘制拟合的线性回归直线。
- 使用
- 图形展示: 添加了标题、轴标签和图例,并显示最终的图形。
图片解读
- 蓝色点表示数据点。
- 红色线表示拟合的线性回归直线。
- 你可以修改菜蔬来使得预测和蓝点偏离,这样可以更直观的理解拟合
上面这段代码不仅计算并展示了线性回归的结果,还通过图形化的方式展示了模型的拟合效果。
2. K-近邻算法(K-NN)
K-近邻是一个简单的分类算法,它通过计算样本点之间的距离来分类。
应用场景:
-
分类任务: K-NN 是一种基于实例的学习算法,适用于小数据集的分类任务。例如:
- 手写数字识别: 识别手写数字(如MNIST数据集中的数字)。</