【机器学习-二-监督学习& 波士顿房价预测实战】

监督学习

什么是监督学习

监督学习最关键 的一个特征就是会给机器学习算法正确答案。这个意思就是,在使用机器学习算法的时候,会给算法一对 输入,这个输入包括:input x,以及 对应的期望输出output y(也就是所谓的标签label),通过这种学习,最终算法会在给定一个输入x的时候,预测对应的输出。

下面是监督学习的例子:

比如输入一个文本,让算法预测,这个正面还是负面评价

比如输入邮件,让算法预测,这是垃圾邮件还是正常邮件

比如输入用户信息和广告,预测用户是否会点击

比如输入雷达影像,输出其他汽车的位置

下面深入了解下监督学习

监督学习

我们训练一个算法,预测房价,首先我们需要收集一些数据,比如房屋的面积和房价,数据看起来是这样的:

有了这些数据以后,想预测比如房屋大小在750的时候,房子的价格大概是多少的时候,应该怎么做呢?

首先是把这些数据拟合成一条直线,根据这条直线就可以计算出数据在其他值的价格。

当然这条拟合线并不一定是直线,也有可能是曲线,后面的章节会学习到如何选用直线或者曲线或者更复杂的线来拟合这些数据。

回归

上面这种特定类型算法就叫做回归。

这种算法的学习任务就是要预测一个值,这个值有无限可能,可能是任何一个数字。这是回归任务的重要特征。

分类

还有一种监督学习方法,叫做分类。

比如输入一个文本,让机器判定这个评价是正面的还是负面的。

比如:今天电影很好看。这是正面的

比如:电影情节拖沓,漫长冗余。这个评价就是负面的。

这种分类通常是拟合一条线或者更复杂的函数,来划定区域,在某个特定的区域是一种类型,另外的区域就是另外的类型:

这种算法的学习任务,输出只有几种类型,当然分类可以超过三种或者众多种类,但是都是有限的集合。不像是回归,有无限可能。

波士顿房价预测-实战

下面是波士顿房价预测实战,使用sklearn库,并使用KNN LINEAR等算法来预测房价

加载模块

python 复制代码
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split  # 对数据集切分
from sklearn.metrics import r2_score

# 机器算法模型
from sklearn.neighbors import KNeighborsRegressor  # KNN,即K近邻算法
from sklearn.linear_model import LinearRegression  # 多元线性回归算法
from sklearn.linear_model import Ridge  # 线性回归算法Ridge回归,岭回归
from sklearn.linear_model import Lasso  # 线性回归算法Lasso回归,可用作特征筛选
from sklearn.tree import DecisionTreeRegressor  # 决策树,既可以做分类也可以做回归(本文主要用于分类问题)
from sklearn.svm import SVR  # 支持向量机

import pandas as pd
import numpy as np

读取数据

python 复制代码
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]
print(data.shape)
# 切割数据样本集合测试集
X_train, x_test, y_train, y_true = train_test_split(data, target, test_size=0.2)  # 20%测试集;80%训练集
# 可视化
data_df = pd.DataFrame(data)
data_df['房价值'] = target
print(data_df.head(10))

创建KNN Linear等学习模型&训练模型

python 复制代码
# 创建学习模型
knn = KNeighborsRegressor()
linear = LinearRegression()
ridge = Ridge()
lasso = Lasso()
decision = DecisionTreeRegressor()
svr = SVR()

# 训练模型
knn.fit(X_train, y_train)  # 学习率、惩罚项都封装好了
linear.fit(X_train, y_train)
ridge.fit(X_train, y_train)
lasso.fit(X_train, y_train)
decision.fit(X_train, y_train)
svr.fit(X_train, y_train)

预测数据

python 复制代码
y_pre_knn = knn.predict(x_test)
y_pre_linear = linear.predict(x_test)
y_pre_ridge = ridge.predict(x_test)
y_pre_lasso = lasso.predict(x_test)
y_pre_decision = decision.predict(x_test)
y_pre_svr = svr.predict(x_test)

评分以及绘图

python 复制代码
knn_score = r2_score(y_true, y_pre_knn)
linear_score = r2_score(y_true, y_pre_linear)
ridge_score = r2_score(y_true, y_pre_ridge)
lasso_score = r2_score(y_true, y_pre_lasso)
decision_score = r2_score(y_true, y_pre_decision)
svr_score = r2_score(y_true, y_pre_svr)

# 绘图
# KNN
plt.plot(y_true, label='true')
plt.plot(y_pre_knn, label='knn')
plt.legend()

# Linear
plt.plot(y_true, label='true')
plt.plot(y_pre_linear, label='linear')
plt.legend()

# Ridge
plt.plot(y_true, label='true')
plt.plot(y_pre_ridge, label='ridge')
plt.legend()

# Lasso
plt.plot(y_true, label='true')
plt.plot(y_pre_lasso, label='lasso')
plt.legend()

# Decision
plt.plot(y_true, label='true')
plt.plot(y_pre_decision, label='decision')
plt.legend()

# SVR
plt.plot(y_true, label='true')
plt.plot(y_pre_svr, label='svr')
plt.legend()

plt.show()

最终结果

简单学习后,效果还是不错的。

相关推荐
明朝百晓生41 分钟前
强化学习【Monte Carlo Learning][MC Basic 算法]
人工智能·机器学习
云知谷5 小时前
【C++基本功】C++适合做什么,哪些领域适合哪些领域不适合?
c语言·开发语言·c++·人工智能·团队开发
rit84324996 小时前
基于MATLAB实现基于距离的离群点检测算法
人工智能·算法·matlab
初学小刘7 小时前
深度学习:从图片数据到模型训练(十分类)
人工智能·深度学习
递归不收敛7 小时前
大语言模型(LLM)入门笔记:嵌入向量与位置信息
人工智能·笔记·语言模型
deng-c-f8 小时前
Linux C/C++ 学习日记(28):KCP协议(四):如何实现更复杂的业务:将连接状态的管理进行封装,用户只需实现发送、接收、断开的处理逻辑。
学习·网络编程·kcp
之墨_8 小时前
【大语言模型】—— 自注意力机制及其变体(交叉注意力、因果注意力、多头注意力)的代码实现
人工智能·语言模型·自然语言处理
从孑开始9 小时前
ManySpeech.MoonshineAsr 使用指南
人工智能·ai·c#·.net·私有化部署·语音识别·onnx·asr·moonshine
涛涛讲AI9 小时前
一段音频多段字幕,让音频能够流畅自然对应字幕 AI生成视频,扣子生成剪映视频草稿
人工智能·音视频·语音识别
可触的未来,发芽的智生9 小时前
新奇特:黑猫警长的纳米世界,忆阻器与神经网络的智慧
javascript·人工智能·python·神经网络·架构