机器学习——线性回归

线性回归

任务:基于0428.xlsx文件,建立线性回归模型,预测x = 3.5时对应的y值,评估模型表现

python 复制代码
# 加载数据
import pandas as pd
data = pd.read_excel('0428.xlsx')
data.head()

# data赋值
x = data.loc[:, 'x']
y = data.loc[:, 'y']
print(x, y)

# 可视化
from matplotlib import pyplot as plt
plt.figure(figsize=(3, 3))
plt.scatter(x, y)
plt.xlabel('x')
plt.ylabel('y')
plt.title('Scatter Plot of x and y')
plt.show()

# 建立线性回归模型
from sklearn.linear_model import LinearRegression
lr_model = LinearRegression()

# 转换数组,防止报错(维度不匹配)
import numpy as np
x = np.array(x)
x = x.reshape(-1, 1)
y = np.array(y)
y = y.reshape(-1, 1)

# 模型训练
lr_model.fit(x, y)

# 检查预测是否准确(比较原数据和预测数据)
y_predict = lr_model.predict(x)
print(y_predict)

# 完成任务要求(3.5处的y,模型表现)
y_3_5 = lr_model.predict([[3.5]])
print(y_3_5)

# 计算最小二乘法里的a和b
a = lr_model.coef_
b = lr_model.intercept_
print(f'a: {a}, b: {b}')

# MSE以及R²分数(MSE越小越好,R²分数越接近1越好)
from sklearn.metrics import mean_squared_error, r2_score
mse = mean_squared_error(y, y_predict)
r2 = r2_score(y, y_predict)
print(f'MSE: {mse}, R² Score: {r2}')

# 画出y和y_predict的散点图
plt.figure(figsize=(3, 3))    
plt.scatter(y, y_predict)
plt.xlabel('Actual y')
plt.ylabel('Predicted y')
plt.title('Actual vs Predicted y')
plt.show()

多因子线性回归实战------------房价预测

建立线性回归模型,预测合理放假

(1) 以RM为输入变量,建立单因子模型,评估模型表现,可视化线性回归预测结果

(2) 以RM,LSTAT,PTRATIO为输入变量,建立多因子模型,评估模型表现

(3) 预测RM = 7,LSTAT=11,PTRATIO=20时的合理房价

python 复制代码
# 加载数据
import pandas as pd
data = pd.read_csv('housing.csv')
data.head()

# 多个图画在一起,观察不同特征与房价的关系
from matplotlib import pyplot as plt
plt.figure(figsize=(12, 5))
plt.subplot(1, 3, 1)
plt.scatter(data['RM'], data['MEDV'])
plt.xlabel('RM')
plt.ylabel('MEDV')
plt.title('RM vs MEDV')
plt.subplot(1, 3, 2)
plt.scatter(data['LSTAT'], data['MEDV'])
plt.xlabel('LSTAT')
plt.ylabel('MEDV')
plt.title('LSTAT vs MEDV')
plt.subplot(1, 3, 3)
plt.scatter(data['PTRATIO'], data['MEDV'])
plt.xlabel('PTRATIO')
plt.ylabel('MEDV')
plt.title('PTRATIO vs MEDV')
plt.show()

# 训练数据的赋值
X = data.loc[:,'RM']
Y = data.loc[:,'MEDV']

# 建立单因子模型
from sklearn.linear_model import LinearRegression
LR1 = LinearRegression()

# 数组维度转换
X = np.array(X)
X = X.reshape(-1, 1)
Y = np.array(Y)
Y = Y.reshape(-1, 1)

# 模型训练
LR1.fit(X, Y)

# 计算最小二乘法里的a和b
a = LR1.coef_
b = LR1.intercept_
print(f'a: {a}, b: {b}')

# MSE以及R²分数(MSE越小越好,R²分数越接近1越好)
from sklearn.metrics import mean_squared_error, r2_score
Y_predict = LR1.predict(X)
mse = mean_squared_error(Y, Y_predict)
r2 = r2_score(Y, Y_predict)
print(f'MSE: {mse}, R² Score: {r2}')

# 画图
plt.figure(figsize=(3, 3))
plt.scatter(Y, Y_predict)
plt.xlabel('Actual Y')
plt.ylabel('Predicted Y')   
plt.title('Actual vs Predicted Y')
plt.show()

# 多因子线性模型
x_multi = data.drop(['MEDV'], axis=1)

# 建立多因子线性模型
LR_multi = LinearRegression()

# 模型训练
LR_multi.fit(x_multi, Y)

# MSE以及R²分数(MSE越小越好,R²分数越接近1越好)
Y_multi_predict = LR_multi.predict(x_multi)
mse = mean_squared_error(Y, Y_multi_predict)
r2 = r2_score(Y, Y_multi_predict)
print(f'MSE: {mse}, R² Score: {r2}')

# 获取所有特征的系数
coefficients = LR_multi.coef_
print("各因子的系数:", coefficients)

# 任务三:预测RM = 7,LSTAT=11,PTRATIO=20时的合理房价
X_test = [[7, 11, 20]]
X_test = np.array(X_test).reshape(1, -1)
Y_test_predict = LR_multi.predict(X_test)
print(f'预测的房价: {Y_test_predict}')

数据集可在主页查找

数据集2:

https://gitee.com/baiyunyi/udacity-mlnd-boston-housing/tree/master

相关推荐
2601_962966642 分钟前
数学与应用数学专业准备风险管理岗,2027届秋招金融知识和工具技能怎么补?
python·sql
码流子8 分钟前
02-易迁信创兼容引擎
大数据·数据库·python
kimnoic14 分钟前
Python常见模块及其用法示例详解
开发语言·python
databook16 分钟前
Scikit-Learn实战:5步搞定PCA降维
python·机器学习·scikit-learn
溪语流沙36 分钟前
【Web全栈进阶】JWT无状态认证:签发、校验、刷新
前端·git·python·github
reasonsummer40 分钟前
【办公类-112-08】20261009园园通信息合并配学号拆班(数据更新,用年月日期区分版本)
python
阿狗童鞋44 分钟前
Python爬虫进阶实战指南
开发语言·爬虫·python
中原第一高手1 小时前
fofatoto 1.8.0 发布:启动即知新版本、中文进度面板与更干净的 Web 日志
python·网络安全·开源·资产测绘·fofa
APIshop1 小时前
淘宝详情接口全解析:从官方开放平台到第三方数据服务
java·python·api
老歌老听老掉牙1 小时前
两个平面旋转平移坐标系间的坐标变换关系
python·算法·平面·旋转·平移