版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验1基于线性回归的房价预测一、实验目的及要求理解监督学习中回归任务的基本思想,掌握“数据准备→选择模型→定义损失函数→训练模型→评估与应用”的机器学习基本流程。掌握使用scikit-learn构建线性回归模型的方法,理解模型参数(权重、偏置)的含义及其对预测结果的影响。掌握训练集/测试集的划分方法,理解划分的目的在于客观评估模型在未见过数据上的泛化能力。掌握均方误差(MSE)、平均绝对误差(MAE)、决定系数(R²)等回归评估指标的计算方法与业务含义。能够对预测结果进行可视化分析,并能够结合线性回归的假设条件(线性关系、异常值敏感性等)判断模型的适用性与局限性。二、实验学时2学时(建议时间分配:讲解10分钟,任务实践80分钟,总结报告10分钟)三、实验前准备软件环境:Python3.8及以上,建议使用JupyterNotebook或VSCode。依赖库:NumPy、Pandas、Matplotlib、scikit-learn。安装命令如下:pipinstallnumpypandasmatplotlibscikit-learn知识储备:已学习教材第4.1、4.2、4.3.1、4.4.1节内容,了解回归与分类的区别。四、实验任务任务1环境准备与数据集加载(10分钟)实验采用模拟生成的房价数据集,不依赖网络下载。数据集包含面积、卧室数、距市中心距离、楼层、房龄5个数值型特征,以及房价(万元)1个连续型目标变量。任务2数据探索与划分(15分钟)使用Pandas观察样本量、特征名称与统计分布;按8:2划分为训练集与测试集。注意:划分必须在任何预处理之前完成,避免测试集信息泄漏。任务3特征标准化(10分钟)由于面积、房龄、楼层等特征量纲不同,使用StandardScaler对训练集进行标准化,并用训练集的均值和标准差转换测试集。任务4模型训练与预测(15分钟)使用LinearRegression训练模型;训练完成后,对测试集进行预测。记录模型学习到的特征权重与截距,并解释其业务含义。任务5模型评估(15分钟)计算MSE、MAE、R²三个指标,理解它们各自的侧重点:MSE惩罚大误差;MAE更鲁棒;R²越接近1表示模型拟合越好。任务6结果可视化(15分钟)绘制真实房价vs预测房价散点图,以及残差图,直观判断模型效果。参考代码以下为完整可运行代码。若图表中文显示为方框,请根据本地环境修改plt.rcParams中的字体名称:#实验二:基于线性回归的房价预测
importnumpyasnp
importpandasaspd
importmatplotlib.pyplotasplt
fromsklearn.model_selectionimporttrain_test_split
fromsklearn.preprocessingimportStandardScaler
fromsklearn.linear_modelimportLinearRegression
fromsklearn.metricsimportmean_squared_error,mean_absolute_error,r2_score
#设置中文字体(根据本地环境选择合适字体)
plt.rcParams['font.sans-serif']=['SimHei','MicrosoftYaHei','ArialUnicodeMS']
plt.rcParams['axes.unicode_minus']=False
#1.构造模拟房价数据集
np.random.seed(42)
n=500
data=pd.DataFrame({
"面积":np.random.uniform(50,200,n),
"卧室数":np.random.randint(1,6,n),
"距市中心距离":np.random.uniform(1,20,n),
"楼层":np.random.randint(1,30,n),
"房龄":np.random.uniform(0,40,n),
})
#真实房价(万元)=面积*3-距市中心距离*2-房龄*0.5+楼层*0.3+卧室数*5+噪声
noise=np.random.normal(0,15,n)
price=(
data["面积"]*3
-data["距市中心距离"]*2
-data["房龄"]*0.5
+data["楼层"]*0.3
+data["卧室数"]*5
+noise
)
X=data
y=price
feature_names=list(X.columns)
print("特征名称:",feature_names)
print("样本数:",X.shape[0])
print(X.describe().round(2))
#2.划分训练集与测试集
X_train,X_test,y_train,y_test=train_test_split(
X,y,test_size=0.2,random_state=42
)
#3.特征标准化(仅使用训练集参数)
scaler=StandardScaler()
X_train_scaled=scaler.fit_transform(X_train)
X_test_scaled=scaler.transform(X_test)
#4.训练线性回归模型
model=LinearRegression()
model.fit(X_train_scaled,y_train)
#5.预测
y_pred=model.predict(X_test_scaled)
#6.评估
mse=mean_squared_error(y_test,y_pred)
mae=mean_absolute_error(y_test,y_pred)
r2=r2_score(y_test,y_pred)
print(f"\nMSE={mse:.4f}")
print(f"MAE={mae:.4f}")
print(f"R²={r2:.4f}")
#输出模型参数
print("\n特征权重:")
forname,coefinzip(feature_names,model.coef_):
print(f"{name}:{coef:.4f}")
print(f"截距(偏置):{ercept_:.4f}")
#7.可视化
plt.figure(figsize=(12,5))
plt.subplot(1,2,1)
plt.scatter(y_test,y_pred,alpha=0.5,edgecolors="none")
plt.plot([y_test.min(),y_test.max()],[y_test.min(),y_test.max()],"r--",lw=2)
plt.xlabel("真实房价(万元)")
plt.ylabel("预测房价(万元)")
plt.title("真实值vs预测值")
plt.subplot(1,2,2)
residuals=y_test-y_pred
plt.scatter(y_pred,residuals,alpha=0.5,edgecolors="none")
plt.axhline(0,color="r",linestyle="--")
plt.xlabel("预测房价(万元)")
plt.ylabel("残差")
plt.title("残差图")
plt.tight_layout()
plt.show()
预期结果(参考)运行代码后,你应看到类似以下的结果(具体数值因随机种子固定而一致):MSE=203.3851
MAE=11.4276
R²=0.9885
特征权重:
面积:135.6966
卧室数:7.5606
距市中心距离:-9.8135
楼层:1.5095
房龄:-5.1109
截距(偏置):365.6645结果解读:R²接近0.99,说明线性模型能很好地解释房价变异;面积系数为正且最大,说明面积是房价最重要的正向影响因素;距市中心距离和房龄系数为负,说明距离市中心越远、房龄越老,房价越低。结果记录表请将你的实验结果填入下表,用于撰写实验报告:项目数值含义解读MSE预测误差的平方均值MAE预测误差的绝对值均值R²模型解释数据变异的比例面积系数面积每增加1单位,房价平均变化多少距市中心距离系数距离每增加1单位,房价平均变化多少房龄系数房龄每增加1单位,房价平均变化多少五、实验重点、难点重点:线性回归的建模流程、训练集/测试集划分原则、回归评估指标(MSE/MAE/R²)的含义与计算。难点:理解特征标准化的必要性;理解模型系数的业务含义;识别线性假设的局限。六、操作要点建议在JupyterNotebook中按代码块逐步执行,每执行一步观察输出,确认无误后再进行下一步。训练集与测试集的划分应在使用StandardScaler之前完成,严禁先对整个数据集标准化再划分。特征标准化仅对数值特征进行,本实验所有特征均为数值型,因此可直接对整个特征矩阵标准化。若运行环境缺少中文字体,图表标签可能显示为方框,可尝试将plt.rcParams['font.sans-serif']中的字体改为本地可用字体。七、注意事项线性回归对异常值较为敏感,若加入极端样本,可能对模型参数产生较大影响。线性回归假设特征与目标之间近似线性相关;若关系明显非线性,预测效果会变差。评估指标仅反映模型在测试集上的表现,不能代表模型在所有真实场景中的可靠性。建模过程中应固定random_state,确保实验结果可复现。八、实验报告要求填写“结果记录表”,并解释各指标的含义。结合模型系数,说明哪些因素对房价影响最大、影响方向如何。观察真实值vs预测值散点图,判断模型拟合效果。思考题:如果将“房龄”替换为“房龄的平方”,模型会有什么变化?这说明了线性回归的什么局限?实验2基于逻辑回归的助学贷款还款风险预测一、实验目的及要求理解监督学习中分类任务的基本思想,能够区分分类任务与回归任务在目标形式上的差异。掌握逻辑回归模型的核心原理,理解Sigmoid函数如何将线性得分映射到(0,1)区间以表示概率。掌握分类任务的常用评价指标:准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1分数与混淆矩阵,并能够根据业务场景选择合适的指标。理解分类阈值对模型决策的影响,能够根据“宁可多预警,也不漏掉高风险”等业务需求调整阈值。树立负责任使用分类模型的意识,关注敏感特征可能带来的公平性与伦理风险。二、实验学时2学时(建议时间分配:讲解10分钟,任务实践80分钟,总结报告10分钟)三、实验前准备软件环境:Python3.8及以上,建议使用JupyterNotebook或VSCode。依赖库:NumPy、Pandas、Matplotlib、scikit-learn。安装命令如下:pipinstallnumpypandasmatplotlibscikit-learn知识储备:已学习教材第4.3.1节(监督学习)与4.4.2节(逻辑回归),理解分类与回归的区别。四、实验任务任务1构造实验数据集(10分钟)参考教材表4-7,构造一个助学贷款还款风险数据集。每条样本包含:GPA(绩点)、家庭人均月收入(千元)、是否有兼职经历(0/1)、专业类型、贷款金额(万元)、是否按时还款(0/1)。任务2数据预处理(15分钟)将类别型特征“专业类型”进行独热编码;将数据集按8:2划分为训练集与测试集;对数值特征进行标准化处理。任务3训练逻辑回归模型(15分钟)使用LogisticRegression训练二分类模型。由于数据量较小,本实验使用solver='liblinear'以获得更稳定的收敛效果。输出模型系数,分析各特征对“按时还款概率”的影响方向。任务4模型评估(20分钟)计算准确率、精确率、召回率、F1分数,绘制混淆矩阵;结合资助中心的业务目标,解释不同指标的含义。任务5阈值调整实验(20分钟)改变分类阈值(如0.3、0.5、0.7),观察精确率与召回率的变化,绘制阈值—指标曲线,理解二者的权衡关系。参考代码以下为完整可运行代码。若图表中文显示为方框,请根据本地环境修改plt.rcParams中的字体名称:#实验三:基于逻辑回归的助学贷款还款风险预测
importnumpyasnp
importpandasaspd
importmatplotlib.pyplotasplt
fromsklearn.model_selectionimporttrain_test_split
fromsklearn.preprocessingimportStandardScaler
fromsklearn.linear_modelimportLogisticRegression
fromsklearn.metricsimport(
accuracy_score,precision_score,recall_score,f1_score,
confusion_matrix,classification_report
)
#设置中文字体
plt.rcParams['font.sans-serif']=['SimHei','MicrosoftYaHei','ArialUnicodeMS']
plt.rcParams['axes.unicode_minus']=False
#1.构造数据集
np.random.seed(42)
n=300
data=pd.DataFrame({
"GPA":np.round(np.random.uniform(2.0,4.5,n),2),
"家庭人均月收入":np.round(np.random.uniform(3,15,n),1),
"是否有兼职":np.random.randint(0,2,n),
"专业类型":np.random.choice(["理工","文史","经管"],n),
"贷款金额":np.round(np.random.uniform(1,5,n),1),
})
#生成标签:加入随机噪声,使任务更接近真实场景
score=(
0.6*data["GPA"]
+0.08*data["家庭人均月收入"]
+0.25*data["是否有兼职"]
-0.05*data["贷款金额"]
+np.random.normal(0,0.5,n)
)
data["是否按时还款"]=(score>score.median()).astype(int)
print("数据集样本量:",data.shape[0])
print("按时还款分布:\n",data["是否按时还款"].value_counts())
#2.独热编码
X=pd.get_dummies(data.drop("是否按时还款",axis=1),columns=["专业类型"],drop_first=True)
y=data["是否按时还款"]
#3.划分与标准化
X_train,X_test,y_train,y_test=train_test_split(
X,y,test_size=0.2,random_state=42
)
scaler=StandardScaler()
num_cols=["GPA","家庭人均月收入","贷款金额"]
X_train[num_cols]=scaler.fit_transform(X_train[num_cols])
X_test[num_cols]=scaler.transform(X_test[num_cols])
#4.训练逻辑回归(使用liblinear求解器,适合小数据集)
model=LogisticRegression(random_state=42,solver='liblinear')
model.fit(X_train,y_train)
#5.预测与评估
y_pred=model.predict(X_test)
y_prob=model.predict_proba(X_test)[:,1]
print("\n混淆矩阵:")
print(confusion_matrix(y_test,y_pred))
print("\n分类报告:")
print(classification_report(y_test,y_pred,target_names=["未按时","按时"]))
print(f"准确率:{accuracy_score(y_test,y_pred):.4f}")
print(f"精确率:{precision_score(y_test,y_pred):.4f}")
print(f"召回率:{recall_score(y_test,y_pred):.4f}")
print(f"F1分数:{f1_score(y_test,y_pred):.4f}")
#输出特征系数
print("\n特征系数(系数越大,对“按时还款”的正面影响越强):")
forname,coefinzip(X.columns,model.coef_[0]):
print(f"{name}:{coef:.4f}")
#6.阈值调整实验
thresholds=np.arange(0.1,0.95,0.05)
precisions,recalls,f1s=[],[],[]
fortinthresholds:
pred_t=(y_prob>=t).astype(int)
precisions.append(precision_score(y_test,pred_t,zero_division=0))
recalls.append(recall_score(y_test,pred_t,zero_division=0))
f1s.append(f1_score(y_test,pred_t,zero_division=0))
plt.figure(figsize=(8,5))
plt.plot(thresholds,precisions,label="精确率",marker="o")
plt.plot(thresholds,recalls,label="召回率",marker="s")
plt.plot(thresholds,f1s,label="F1",marker="^")
plt.xlabel("分类阈值")
plt.ylabel("指标值")
plt.title("不同阈值下的精确率、召回率与F1")
plt.legend()
plt.grid(True)
plt.show()
预期结果(参考)运行代码后,你应看到类似以下的结果:混淆矩阵:
[[198]
[825]]
分类报告:
precisionrecallf1-scoresupport
未按时0.700.700.7027
按时0.760.760.7633
准确率:0.7333
精确率:0.7576
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中学历史教师招聘笔试题库解析
- 《银发镜头里的江城慢游-老年人摄影旅行团行程强度控制与药物储备指南》
- 棚改房屋买卖合同(2026版)
- 物业人员劳动合同(2026版)
- 2026年秋季开学大学军训凝聚班级力量班会
- 2026 年秋季开学 拒绝校园欺凌 共建平安和谐校园
- 2026 年秋季开学 筑牢防溺水意识 敬畏宝贵生命
- 湖南省株洲市部分学校2025-2026学年高二下学期期末联合考试语文试卷(含答案)
- 2026中国新能源汽车电池管理系统技术演进与市场需求预测报告
- 2026中国现代畜牧业养殖设备行业市场现状供需分析及投资评估规划分析研究报告
- 赋得古原草送别 混声合唱简谱
- 2026年洛阳市涧西区辅警协警招聘笔试参考题库及答案详解
- 大气污染监测分析培训课件2026年
- 2025年广西智能制造职业技术学院招聘真题
- 2026年嘉兴市秀洲区公开招聘劳动合同制教职工(幼儿教师、卫生保健员)24人笔试备考题库及答案详解
- 2026年秋统编版(新教材)道德与法治五年级上册(全册)分层作业及答案(附目录)
- 小升初分班考2026年四川省凉山州语文模拟试卷 含答案
- 光伏工程施工方案(范本)
- 2026年高考新高考一卷英语真题试卷含答案
- 2026年汽车行业竞业禁止协议
- 水利水电工程单元工程施工质量检验表与验收表(SLT631.5-2025)
评论
0/150
提交评论