在这篇博客中,我们将通过一个线性回归模型,使用Python和Scikit-learn库来预测创业公司的利润。我们将使用一个包含50家创业公司数据的CSV文件,来预测它们的利润,并可视化实际与预测结果的对比。
1. 数据集介绍(取自网络)
我们使用的datastes.csv
数据集包含了50家创业公司的不同属性。具体来说,每一行代表一家公司的数据,包含以下列:
R&D Spend
: 研发支出Administration
: 行政支出Marketing Spend
: 市场营销支出State
: 公司所在的州(纽约、加利福尼亚、佛罗里达)Profit
: 利润(我们需要预测的目标变量)
数据集部分示例:
R&D Spend | Administration | Marketing Spend | State | Profit |
---|---|---|---|---|
165349.2 | 136897.8 | 471784.1 | New York | 192261.83 |
162597.7 | 151377.59 | 443898.53 | California | 191792.06 |
153441.51 | 101145.55 | 407934.54 | Florida | 191050.39 |
144372.41 | 118671.85 | 383199.62 | New York | 182901.99 |
142107.34 | 91391.77 | 366168.42 | Florida | 166187.94 |
131876.9 | 99814.71 | 362861.36 | New York | 156991.12 |
2. 数据预处理
首先,我们需要导入数据并进行一些预处理。在数据集中,State
列是分类变量,需要进行热编码处理,以便将其转换为适合机器学习模型的数值格式。
这里与简单线性回归模型不同的是:
- 不需要进行特征处理
- 需要对地区进行热编码
import numpy as np
import pandas as pd
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
# 读取数据集
datasets = pd.read_csv('./datasets.csv')
# 特征与标签分离
X = datasets.iloc[:,:-1].values
Y = datasets.iloc[:,-1].values
# 热编码处理州列(State)
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [3])], remainder='passthrough')
X = np.array(ct.fit_transform(X))
在这段代码中,我们使用了ColumnTransformer
和OneHotEncoder
将State
列进行热编码。热编码的作用是将分类变量转换为二进制变量,从而使其适应机器学习算法。
3. 拆分数据集
接下来,我们将数据集分为训练集和测试集。训练集用于训练模型,测试集用于评估模型的性能。
# 拆分数据集
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=1)
在这个例子中,我们使用了80%的数据进行训练,20%的数据用于测试模型。random_state=1
确保每次拆分都一致。如果你的数据集不够多,可以不进行这一步。
4. 训练线性回归模型
我们使用线性回归算法来建立预测模型。线性回归试图找到输入特征与目标变量(利润)之间的线性关系。
# 创建线性回归模型
lr = LinearRegression()
# 训练模型
lr.fit(x_train, y_train)
5. 预测与可视化结果
训练完成后,我们可以使用模型进行预测。接着,我们将预测结果与实际的测试数据进行比较,并通过图表显示出来。
# 进行预测
y_pred = lr.predict(x_test)
# 设置打印精度
np.set_printoptions(precision=2)
# 绘制图表
plt.plot(y_test, color='red', label='test')
plt.plot(y_pred, color='blue', label='predict')
plt.legend()
plt.show()
这段代码绘制了两个折线图,红色表示实际值,蓝色表示预测值。通过这种方式,我们可以清楚地看到模型的预测效果。
图为测试数据和预测数据的折线对比图,可以看到虽然在数据集较少的情况,但是预测效果还算不错。
6. 结果分析
通过观察图表,我们可以看到实际值和预测值之间的差距。虽然线性回归模型能够给出相对合理的预测,但由于数据的复杂性,模型的预测结果可能并不完美。因此,可能需要调整模型或使用其他更复杂的算法来提高预测准确性。
7. 结论
在这篇博客中,我们使用了线性回归算法对创业公司利润进行了预测。通过数据预处理、模型训练以及结果可视化,我们能够清楚地看到模型的表现。虽然线性回归是一个简单而强大的工具,但在实际应用中,可能需要根据具体数据进行更复杂的优化和调整。
线性回归模型的优势在于其简单性和易于解释,但在处理非线性问题时可能会遇到挑战。在实际应用中,尝试不同的算法,如决策树、随机森林或神经网络,可能会带来更好的效果。
希望这篇博客对你理解线性回归和其应用有所帮助!
如有错误或笔误,请及时指出!😄
一起交流,一起学习,enjoy machine learning!🚀💡