大模型sklearn机器学习的房价预测系统 数据分析可视化系统
本课题使用面向对象的设计思想进行设计,对系统的现状进行调研,收集当前基于Python的房价预测系统的需求,以及对实际业务的调查,整理需求文档,使用用例图状态图等进行描述,接着使用面向对象技术设计系统功能,系统数据库。完成基于Python的房价预测系统,主要包括了系统的开发背景收集、建模工具选型、技术确定、需求分析的整理、数据库的设计和功能模块划分、系统环境的部署、实现测试方法的选择,以及最后的搭建
通过功能的需求分析进行系统设计,拟采Django 应用框架,提高开发效率,降低系统维护难度。
本课题选择Python来进行开发,前台使用vue开发,数据库选择MySQL进行建库,python是目前最为流行的技术,无论是成熟度和未来发展都更能适应本基于Python的房价预测系统的业务。
本课题使用面向对象的设计思想进行设计,对系统的现状进行调研,收集当前基于Python的房价预测系统的需求,以及对实际业务的调查,整理需求文档,使用用例图状态图等进行描述,接着使用面向对象技术设计系统功能,系统数据库。完成基于Python的房价预测系统,主要包括了系统的开发背景收集、建模工具选型、技术确定、需求分析的整理、数据库的设计和功能模块划分、系统环境的部署、实现测试方法的选择,以及最后的搭建部署。a.校所学的相关专业课程如《数据库原理及应用》、《Django框架》、《python程序设计》、《python数据分析》、《预测算法》、《Web开发》、《软件工程》等课程的综合应用对完成本课题研究有较大的促进。
b.导师提供的相关参考资料,也让我有了更清晰的设计思路与过程。
c.收集了关于Django框架、python语言等方面的相关资料进行研读,对Scikit-learn等python库的训练使用。
d.下载相关的爬虫项目进行研究,学习代码框架。
e.通过理论知识、结合实践经验,可以支撑毕业设计的顺利完成。
通过使用Python这种面向对象语言与后端的MySQL数据库相结合,在老师的指导下完成设计,并对整个系统进行验证测试,利用基于Python的房价预测系统,直接在前台页面里注册、登录、查询爬取的房价数据,并进行预测分析。管理后台对爬取的信息进行管理。
使用Scikit-learn库搭建线性回归模型进行房价预测,以面积、人均收入、平均房龄为变量,建立多因子模型,评估模型表现。先对数据进行预处理,建立单因子线性回归模型,训练模型,评估模型表现,可视化线性回归预测结果。
def to_forecast(data,req_dict,value):
if len(data) < 5:
print(f"的样本数量不足: {len(data)}")
return pd.DataFrame()
#3.处理特征值和目标值
labels={}
for key in data.keys():
if pd.api.types.is_string_dtype(data[key]):
label_encoder = LabelEncoder()
labels[key] = label_encoder
data[key] = label_encoder.fit_transform(data[key])
#4.数据集划分
X = data[[
'roomtype',
'roomorientation',
'area',
'decorationcondition',
]]
y = data[[
'unitprice',
]]
x_train, x_test, y_train, y_test = train_test_split(X, y,test_size=0.2, random_state=22)
#5.构建预测特征值
#根据输入的特征值去预测
if req_dict:
req_dict.pop('addtime',None)
future_df = pd.DataFrame([req_dict])
for key in future_df.keys():
if key in labels:
encoder = labels[key]
values = future_df[key][0]
try:
values = encoder.transform([values])[0]
except ValueError as e: #处理未见过的标签
values = np.array([encoder.transform([v])[0] if v in encoder.classes_ else -1 for v in values]).sum()
future_df[key][0] = values
else:
future_df = x_test
#特征工程-标准化
estimator_file = os.path.join(parent_directory, "gzhpforecast.pkl")
estimator = RandomForestRegressor(n_estimators=100, random_state=42)
_, num_columns = y_train.shape
if num_columns>=2:
estimator.fit(x_train, y_train)
else:
estimator.fit(x_train, y_train.values.ravel())
y_pred = estimator.predict(x_test)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体 SimHei
plt.rcParams['axes.unicode_minus'] = False # 解决负号 '-' 显示为方块的问题
# 绘制预测值与实际值的散点图
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, alpha=0.5)
plt.xlabel("实际值")
plt.ylabel("预测值")
plt.title("实际值与预测值(随机森林回归)")
directory =os.path.join(parent_directory, "templates","front","gzhpforecast","figure.png")
os.makedirs(os.path.dirname(directory), exist_ok=True)
plt.savefig(directory)
plt.clf()
# 绘制特征重要性
feature_importances = estimator.feature_importances_
features = [
'roomtype',
'roomorientation',
'area',
'decorationcondition',
]
sns.barplot(x=feature_importances, y=features)
plt.xlabel("重要性得分")
plt.ylabel("特征")
plt.title("特征重要性")
if value!=None:
directory =os.path.join(parent_directory, "templates","front","gzhpforecast","{value}_figure.png")
os.makedirs(os.path.dirname(directory), exist_ok=True)
plt.savefig(directory)
else:
directory =os.path.join(parent_directory, "templates","front","gzhpforecast","figure_other.png")
os.makedirs(os.path.dirname(directory), exist_ok=True)
plt.savefig(directory)
plt.clf()
#保存模型
joblib.dump(estimator, estimator_file)
y_pred = estimator.predict(x_test)
comparison_df = pd.DataFrame({'实际值': y_test.values.flatten(), '预测值': y_pred.flatten()})
comparison_df = comparison_df.sort_values(by='实际值') # 按实际销量排序,方便可视化
更多推荐




所有评论(0)