5.波士顿房价预测(KNN,决策树,线性回归)

波士顿房价预测

  • [1. 机器学习中的任务分类](#1. 机器学习中的任务分类)
  • [2. 波士顿房价预测](#2. 波士顿房价预测)
    • [2.1 分析数据](#2.1 分析数据)
    • [2.2 比较 MAE 和 MSE](#2.2 比较 MAE 和 MSE)
    • [2.2 代码](#2.2 代码)

1. 机器学习中的任务分类

  • 有监督学习(supervised):有特征也有标签
    • 分类问题
      • classification
      • 预测离散量
    • 回归问题
      • regression
      • 预测连续量
  • 无监督学习(unsupervised):无监督学习
    • 聚类算法
      • KMeans
    • 降维算法
      • PCA
  • 自监督学习:
    • 大模型预训练,使用自监督
    • 输入文本,自己挖空填空

2. 波士顿房价预测

2.1 分析数据

  • 观察数据,最后一列代表房价,是连续量,所以房价预测是一个回归问题。
    24.00
    21.60
    34.70
    33.40
    36.20
    28.70
    22.90
    27.10

2.2 比较 MAE 和 MSE

  • 这里模型的评估与分类问题不同,此处采用的是平均方差误差
  • MAE 平均绝对误差 指的是计算 (预测值-真实值)平均值 ,这种方法可以直观地感受到误差的大小,也有实际的物理意义,更便于理解。但是绝对值会导致函数出现 不可导点 ,这将会给后续的计算带来很大麻烦;
  • MSE 平均平方误差 就是 计算 (预测值-真实值)平方平均值, 这样得到的结果并无实际意义,但是解决了不可导点的问题,从计算角度来讲,更容易求导,简化了计算。
  • 虽然我们无法从 MSE 的数值上直接得到有效信息,但是却可以通过比较来评估模型的好坏,信息是在比较中产生的。

2.2 代码

  • 加载和拆分数据
python 复制代码
X=[]
y=[]
with open('housing.data',mode='r',encoding='utf8') as f:
    for line in f:
        line = line.strip()
        if line:
            line = line.split(' ')
            line = [float(ele) for ele in line if ele]
            features=line[:-1]
            label=line[-1]
            X.append(features)
            y.append(label)

import numpy as np
X=np.array(X)
y=np.array(y)
print(X.shape,y.shape)  #:(506, 13) (506,)  #:(506, 13) (506,)

# 拆分数据
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.15,random_state=0)
  • KNN
python 复制代码
# KNN
from sklearn.neighbors import KNeighborsRegressor
knn=KNeighborsRegressor()
knn.fit(X=X_train,y=y_train)
pred = knn.predict(X_test)
# MAE 平均绝对误差(有不可导点)
# acc1=np.abs(pred-y_test).mean()
# MSE 平均平方误差(一笔糊涂账,从计算角度来讲,求导方便)
print('均方差',((pred-y_test)**2).mean())  #:均方差 47.64864736842107
  • 决策树
python 复制代码
# 决策树
from sklearn.tree import DecisionTreeRegressor
dtr=DecisionTreeRegressor()
dtr.fit(X_train,y_train)
pred=dtr.predict(X_test)
print('均方差',((pred-y_test)**2).mean())  #:均方差 32.76315789473684
  • 线性回归
    y = F ( X ) = x 0 w 0 + x 1 w 1 + x 2 w 2 + . . . + x 12 w 12 y=F(X)=x_0w_0+x_1w_1+x_2w_2+...+x_{12}w_{12} y=F(X)=x0w0+x1w1+x2w2+...+x12w12
python 复制代码
# 线性回归
from sklearn.linear_model import LinearRegression
lr=LinearRegression()
lr.fit(X_train,y_train)
pred=lr.predict(X_test)
MSE=((pred-y_test)**2).mean()
print('系数:',lr.coef_,'偏置',lr.intercept_)  
print('误差:',MSE)  #:误差: 33.12038170826738

输出:
系数: [-1.24536078e-01 4.06088227e-02 5.56827689e-03 2.17301021e+00
-1.72015611e+01 4.02315239e+00 -4.62527553e-03 -1.39681074e+00
2.84078987e-01 -1.17305066e-02 -1.06970964e+00 1.02237522e-02
-4.54390752e-01] 偏置 36.0926776176116

相关推荐
不去幼儿园31 分钟前
【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
人工智能·python·算法·机器学习·强化学习
Mr_Xuhhh33 分钟前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
盼海2 小时前
排序算法(五)--归并排序
数据结构·算法·排序算法
网易独家音乐人Mike Zhou5 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
Swift社区9 小时前
LeetCode - #139 单词拆分
算法·leetcode·职场和发展
Kent_J_Truman9 小时前
greater<>() 、less<>()及运算符 < 重载在排序和堆中的使用
算法
IT 青年10 小时前
数据结构 (1)基本概念和术语
数据结构·算法
Dong雨10 小时前
力扣hot100-->栈/单调栈
算法·leetcode·职场和发展
SoraLuna10 小时前
「Mac玩转仓颉内测版24」基础篇4 - 浮点类型详解
开发语言·算法·macos·cangjie
liujjjiyun10 小时前
小R的随机播放顺序
数据结构·c++·算法