在程序员这个行业,停滞不前就相当于退步,所以为了提高自身的竞争力,广泛的学习知识是必不可少的。今天的课题是使用python来进行简单的AI数据预测,话不多说,速速开始!
准备工作:
在这里我推荐使用魔搭社区,原因也很简单:其是一个大型的面向中国社区的免费的平台来上传和微调自己的模型,并且有阿里云为这个社区提供预装了Python与AI机器学习环境的虚拟机,可以省去很多时间来配置环境等等。Python的notebook(.ipynb后缀文件)
接下来就是准备数据来进行实验了,当然我这里已经准备好了,最终目标就是预测成交额,读者可自行准备。
正片开始:
一、导入pandas库和调取数据:
首先我们需要进行预测就需要庞大的数据来进行训练模型,所以毫无疑问我们的第一步就需要将CSV文件中的数据导出。
这里我们使用Pandas库 (Python中最受欢迎的数据处理和分析库之一) ,并且将其命名为pd方便后续使用。
# 模块引入
import pandas as pd
接下来就可以读取文件了,用Pandas库将包含数据的CSV文件的内容加载到一个DataFrame对象中。(DataFrame是Pandas中用于存储二维表格数据的主要数据结构)
# 注意括号内为文件名称
df_ads = pd.read_csv("直播带货.csv")
当然我们可以验证一下是否读取成功,运行一下得出结果。
# 打印数据样本的尺寸
print(df_ads.size)
# 查看前10个数据
df_ads.head(10)
二、数据可视化:
现在我们读取到了数据,但是却不够直观,所以接下来可以将数据转化为合适的视图。
这里我使用Python中最常用的绘图库之一---matplotlib库,并且选择导入matplotlib.pyplot 模块。
# 命名为plt方便后续调用
import matplotlib.pyplot as plt
为了直观展示数据,这里我选择使用散点图。
plt.plot(df_ads['转发量'], df_ads['成交额'], 'r.', label='data dot')
虽然plt.plot(x, y)通常用于创建折线图,但是由于使用了'r.'来控制绘图的方式,从而使其创建散点图。
df_ads['转发量']和df_ads['成交额']分别作为X轴和Y轴的数据。'r'表示红色(red),'.'表示使用点(dot)来表示数据点。所以将创建一个以红色点显示数据点的散点图。label='data dot'定义了该系列数据在图例中的标签(label)名称为"data dot"。
为了让视图更加直观,可以稍微美化一下,最后显示图表即可。
# 设置X轴坐标名为shares(转发量)
plt.xlabel('shares')
# 设置Y轴坐标名为sales(成交额)
plt.ylabel('sales')
# 添加一个图例
plt.legend()
# 显示图表
plt.show()
三、提取因子:
由于我们最终目标就是预测成交额,所以我们需要将影响成交额的影响因子拿出来进行训练,并且将真实的成交额提取出来方便对比。
# 移除【成交额】这一列(axis=1表示删除列,axis=0表示删除行)剩余的就是影响因子
X = df_ads.drop(["成交额"], axis = 1)
# 提取成交额
y = df_ads.成交额
四、进行训练:
拥有训练的因子后就需要选择一个合适的模型来进行数据训练了,而在这里LinearRegression(线性回归) 简单模型就是一个不错的选择。
# 1.选择合适的模型
from sklearn.linear_model import LinearRegression
# 初始化一个LinearRegression对象
model = LinearRegression()
在这里我们可以使用 train_test_split函数 将数据分为训练部分和测试部分,这样可以更好地评估模型的泛化能力,避免过拟合。
# 2.选择数据
from sklearn.model_selection import train_test_split
# train_test_split 将 特征数据(X) 和 目标变量(y) 分为训练部分和测试部分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
test_size=0.2:指定测试集占总数据集的比例。这里设置20%的数据将被分配到测试集,80%的数据将用于训练集。random_state=0:随机种子,确保每次运行代码时数据划分的结果一致。
当然验证一下就会发现,X_train.size + X_test.size是一定会等于总数据量,y也同理。
接下来就是训练模型了,由于选择的是线性回归模型,那么相当于就是训练 y = ax+b的趋势。
# 3.训练模型进行成长
model.fit(X_train, y_train)
训练后就可以让模型进行预测结果数据了。
# 4.模型预测
# 预期的结果数据(y_pred) 衡量模型训练质量
y_pred = model.predict(X_test)
最后就可以将预测值数据和真值数据放一起来进行比较了。
# 拷贝测试集数据
df_ads_pred = X_test.copy()
df_ads_pred.head()
# 将真值的添加进表格
df_ads_pred['成交额真值'] = y_test
# 将预测值的添加进表格
df_ads_pred['成交额预测值'] = y_pred
# 展示整张表格
df_ads_pred
当然也可以通过评分可以详细了解模型的拟合能力。
print("线性回归预测集评分", model.score(X_test, y_test))
print("线性回归训练集评分", model.score(X_train, y_train))
评分越接近1代表表现越好,而这里训练集的评分高于预测集评分,就代表模型在训练数据上表现很好,但在新数据上表现较差,这样我们就可以直观了解模型的性能然后进行优化了。
五、完整代码演示:
# 导入必要的库
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
df_ads = pd.read_csv("直播带货.csv")
# 分离特征因子和目标变量
X = df_ads[['转发量']] # 特征矩阵
print(X.head())
y = df_ads["成交额"] # 目标变量
print(y.head())
# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 创建线性回归模型实例
model = LinearRegression()
# 使用训练数据拟合模型
model.fit(X_train, y_train)
# 使用测试数据进行预测
y_pred = model.predict(X_test)
# 视图优化:
# 画布大小是 10*6
plt.figure(figsize=(10, 6))
# 散点图
plt.scatter(X_test, y_test, color='red', label='true value')
# 绘制预测值的拟合直线
plt.plot(X_test, y_pred, color='blue', linewidth=2, label="predicted value")
# 设置X轴和Y轴标签
plt.xlabel("shares")
plt.ylabel("sales")
# 设置图表标题
plt.title('shares VS sales')
# 添加图例
plt.legend()
# 显示网格线
plt.grid(True)
# 显示图表
plt.show()