机器学习之分类回归模型(决策数、随机森林)

回归分析

回归分析属于监督学习方法的一种,主要用于预测连续型目标变量,可以预测、计算趋势以及确定变量之间的关系等

Regession Evaluation Metrics

以下是一些最流行的回归评估指标:
平均绝对误差(MAE):目标变量的预测值与实际值之间的平均绝对差值。
均方误差(MSE):目标变量的预测值与实际值之间的平均平方差。
均方根误差(RMSE):均方根误差的平方根。
Huber Loss:一种混合损失函数,在较大误差时从MAE过渡到MSE,在鲁棒性和MSE对异常值的敏感性之间提供平衡。
均方根对数误差
R2-Score

分类模型

决策树(监督分类回归模型)

分类树:该树用于确定目标变量在连续时最有可能落入哪个“类”。
回归树:用于预测连续变量的值。
在决策树中,节点根据属性的阈值划分为子节点。将根节点作为训练集,并根据最优属性和阈值将其分割为两个节点。此外,子集也使用相同的逻辑进行分割。这个过程一直持续,直到在树中找到最后一个纯子集,或者在该生长的树中找到最大可能的叶子数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

根据分割指标和分割方法,可分为:ID3、C4.5、CART算法。
(1)ID3算法:以信息增益为准则来选择最优划分属性
信息增益的计算是基于信息熵(度量样本集合纯度的指标)
在这里插入图片描述
在这里插入图片描述
(2)C4.5基于信息增益率准则 选择最有分割属性的算法
在这里插入图片描述
3. CART:以基尼系数为准则选择最优划分属性,可用于分类和回归
基尼杂质-基尼杂质测量根据多数类标记的子集对随机实例进行错误分类的概率基尼不纯系数越低,意味着子集的纯度越高。分割标准- CART算法评估每个节点上的所有潜在分割,并选择最能减少结果子集的基尼杂质的分割。这个过程一直持续,直到达到一个停止条件,比如最大树深度或叶子节点中的最小实例数。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

sklearn.tree.DecisionTreeClassifier(分类)
class sklearn.tree.DecisionTreeClassifier(*, criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, class_weight=None, ccp_alpha=0.0)[source]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
cancer = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, stratify=cancer.target, random_state=42)
tree = DecisionTreeClassifier(random_state=0)
tree.fit(X_train, y_train)
print("Accuracy on training set: {:.3f}".format(tree.score(X_train, y_train)))
print("Accuracy on test set: {:.3f}".format(tree.score(X_test, y_test)))
tree = DecisionTreeClassifier(max_depth=4, random_state=0)
tree.fit(X_train, y_train)print("Accuracy on training set: {:.3f}".format(tree.score(X_train, y_train)))
print("Accuracy on test set: {:.3f}".format(tree.score(X_test, y_test)))
fig, axes = plt.subplots(2, 3, figsize=(20, 10))
for i, (ax, tree) in enumerate(zip(axes.ravel(), forest.estimators_)):ax.set_title("Tree {}".format(i))mglearn.plots.plot_tree_partition(X_train, y_train, tree, ax=ax)mglearn.plots.plot_2d_separator(forest, X_train, fill=True, ax=axes[-1, -1],alpha=.4)
axes[-1, -1].set_title("Random Forest")
mglearn.discrete_scatter(X_train[:, 0], X_train[:, 1], y_train)
def plot_feature_importances_cancer(model):n_features = cancer.data.shape[1]plt.barh(np.arange(n_features), model.feature_importances_, align='center')plt.yticks(np.arange(n_features), cancer.feature_names)plt.xlabel("Feature importance")plt.ylabel("Feature")plt.ylim(-1, n_features)plot_feature_importances_cancer(tree)

在这里插入图片描述

from sklearn.tree import DecisionTreeClassifier
from sklearn.preprocessing import LabelEncoder# Define the features and target variable
features = [["red", "large"],["green", "small"],["red", "small"],["yellow", "large"],["green", "large"],["orange", "large"],
]
target_variable = ["apple", "lime", "strawberry", "banana", "grape", "orange"]# Flatten the features list for encoding
flattened_features = [item for sublist in features for item in sublist]# Use a single LabelEncoder for all features and target variable
le = LabelEncoder()
le.fit(flattened_features + target_variable)# Encode features and target variable
encoded_features = [le.transform(item) for item in features]
encoded_target = le.transform(target_variable)# Create a CART classifier
clf = DecisionTreeClassifier()# Train the classifier on the training set
clf.fit(encoded_features, encoded_target)# Predict the fruit type for a new instance
new_instance = ["red", "large"]
encoded_new_instance = le.transform(new_instance)
predicted_fruit_type = clf.predict([encoded_new_instance])
decoded_predicted_fruit_type = le.inverse_transform(predicted_fruit_type)
print("Predicted fruit type:", decoded_predicted_fruit_type[0])
DecisionTreeRegressor(回归)
import os
ram_prices = pd.read_csv(os.path.join(mglearn.datasets.DATA_PATH, "ram_price.csv"))plt.semilogy(ram_prices.date, ram_prices.price)
plt.xlabel("Year")
plt.ylabel("Price in $/Mbyte")

在这里插入图片描述

from sklearn.tree import DecisionTreeRegressor
# use historical data to forecast prices after the year 2000
data_train = ram_prices[ram_prices.date < 2000]
data_test = ram_prices[ram_prices.date >= 2000]# predict prices based on date
X_train = data_train.date[:, np.newaxis]
# we use a log-transform to get a simpler relationship of data to target
y_train = np.log(data_train.price)tree = DecisionTreeRegressor(max_depth=3).fit(X_train, y_train)
linear_reg = LinearRegression().fit(X_train, y_train)# predict on all data
X_all = ram_prices.date[:, np.newaxis]pred_tree = tree.predict(X_all)
pred_lr = linear_reg.predict(X_all)# undo log-transform
price_tree = np.exp(pred_tree)
price_lr = np.exp(pred_lr)
plt.semilogy(data_train.date, data_train.price, label="Training data")
plt.semilogy(data_test.date, data_test.price, label="Test data")
plt.semilogy(ram_prices.date, price_tree, label="Tree prediction")
plt.semilogy(ram_prices.date, price_lr, label="Linear prediction")
plt.legend()

在这里插入图片描述

随机森林(集成学习)

先补充组合分类器的概念,将多个分类器的结果进行多票表决或取平均值,以此作为最终的结果。
每个决策树都有很高的方差,但是当我们将它们并行地组合在一起时,结果的方差就会很低,因为每个决策树都在特定的样本数据上得到了完美的训练,因此输出不依赖于一个决策树,而是依赖于多个决策树。在分类问题的情况下,使用多数投票分类器获得最终输出。在回归问题的情况下,最终输出是所有输出的平均值。这部分称为聚合。
1.构建组合分类器的好处:
(1)提升模型精度:整合各个模型的分类结果,得到更合理的决策边界,减少整体错误呢,实现更好的分类效果:
在这里插入图片描述
(2)处理过大或过小的数据集:数据集较大时,可将数据集划分成多个子集,对子集构建分类器;当数据集较小时,通过自助采样(bootstrap)从原始数据集采样产生多组不同的数据集,构建分类器。

(3)若决策边界过于复杂,则线性模型不能很好地描述真实情况。因此,现对于特定区域的数据集,训练多个线性分类器,再将他们集成。
在这里插入图片描述
(4)比较适合处理多源异构数据(存储方式不同(关系型、非关系型),类别不同(时序型、离散型、连续型、网络结构数据))
在这里插入图片描述

随机森林是一个多决策树的组合分类器,随机主要体现在两个方面:数据选取的随机性和特征选取的随机性。
在这里插入图片描述
在这里插入图片描述

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_moonsX, y = make_moons(n_samples=100, noise=0.25, random_state=3)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y,random_state=42)forest = RandomForestClassifier(n_estimators=5, random_state=2)
forest.fit(X_train, y_train)
fig, axes = plt.subplots(2, 3, figsize=(20, 10))
for i, (ax, tree) in enumerate(zip(axes.ravel(), forest.estimators_)):ax.set_title("Tree {}".format(i))mglearn.plots.plot_tree_partition(X_train, y_train, tree, ax=ax)mglearn.plots.plot_2d_separator(forest, X_train, fill=True, ax=axes[-1, -1],alpha=.4)
axes[-1, -1].set_title("Random Forest")
mglearn.discrete_scatter(X_train[:, 0], X_train[:, 1], y_train)

在这里插入图片描述

X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=0)
forest = RandomForestClassifier(n_estimators=100, random_state=0)
forest.fit(X_train, y_train)print("Accuracy on training set: {:.3f}".format(forest.score(X_train, y_train)))
print("Accuracy on test set: {:.3f}".format(forest.score(X_test, y_test)))
plot_feature_importances_cancer(forest)

在这里插入图片描述

我们举一个线性回归的例子。我们有一个住房数据集,我们想预测房子的价格。下面是它的python代码。

# Python code to illustrate 
# regression using data set
import matplotlib
matplotlib.use('GTKAgg')import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
import pandas as pd# Load CSV and columns
df = pd.read_csv("Housing.csv")Y = df['price']
X = df['lotsize']X=X.values.reshape(len(X),1)
Y=Y.values.reshape(len(Y),1)# Split the data into training/testing sets
X_train = X[:-250]
X_test = X[-250:]# Split the targets into training/testing sets
Y_train = Y[:-250]
Y_test = Y[-250:]# Plot outputs
plt.scatter(X_test, Y_test,  color='black')
plt.title('Test Data')
plt.xlabel('Size')
plt.ylabel('Price')
plt.xticks(())
plt.yticks(())
# Create linear regression object
regr = linear_model.LinearRegression()# Train the model using the training sets
regr.fit(X_train, Y_train)# Plot outputs
plt.plot(X_test, regr.predict(X_test), color='red',linewidth=3)
plt.show()

在这里插入图片描述
在这张图中,我们绘制了测试数据。红线表示预测价格的最佳拟合线。使用线性回归模型进行个体预测:
print( str(round(regr.predict(5000))) )

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import sklearn
import warningsfrom sklearn.preprocessing import LabelEncoder
from sklearn.impute import KNNImputer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import f1_score
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import cross_val_scorewarnings.filterwarnings('ignore')
df= pd.read_csv('Salaries.csv')
print(df)

在这里插入图片描述
Here the .info() method provides a quick overview of the structure, data types, and memory usage of the dataset.

df.info()

在这里插入图片描述

# Assuming df is your DataFrame
X = df.iloc[:,1:2].values  #features
y = df.iloc[:,2].values  # Target variable

step 4: Random Forest Regressor model代码对分类数据进行数字编码处理,将处理后的数据与数字数据结合起来,使用准备好的数据训练Random Forest Regression模型。

import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from sklearn.preprocessing import LabelEncoderCheck for and handle categorical variables
label_encoder = LabelEncoder()
x_categorical = df.select_dtypes(include=['object']).apply(label_encoder.fit_transform)
x_numerical = df.select_dtypes(exclude=['object']).values
x = pd.concat([pd.DataFrame(x_numerical), x_categorical], axis=1).values# Fitting Random Forest Regression to the dataset
regressor = RandomForestRegressor(n_estimators=10, random_state=0, oob_score=True)# Fit the regressor with x and y data
regressor.fit(x, y)
# Evaluating the model
from sklearn.metrics import mean_squared_error, r2_score# Access the OOB Score
oob_score = regressor.oob_score_
print(f'Out-of-Bag Score: {oob_score}')# Making predictions on the same data or new data
predictions = regressor.predict(x)# Evaluating the model
mse = mean_squared_error(y, predictions)
print(f'Mean Squared Error: {mse}')r2 = r2_score(y, predictions)
print(f'R-squared: {r2}')

在这里插入图片描述

import numpy as np
X_grid = np.arange(min(X),max(X),0.01)
X_grid = X_grid.reshape(len(X_grid),1) plt.scatter(X,y, color='blue') #plotting real points
plt.plot(X_grid, regressor.predict(X_grid),color='green') #plotting for predict pointsplt.title("Random Forest Regression Results")
plt.xlabel('Position level')
plt.ylabel('Salary')
plt.show()

在这里插入图片描述

from sklearn.tree import plot_tree
import matplotlib.pyplot as plt# Assuming regressor is your trained Random Forest model
# Pick one tree from the forest, e.g., the first tree (index 0)
tree_to_plot = regressor.estimators_[0]# Plot the decision tree
plt.figure(figsize=(20, 10))
plot_tree(tree_to_plot, feature_names=df.columns.tolist(), filled=True, rounded=True, fontsize=10)
plt.title("Decision Tree from Random Forest")
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/738235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 windows 下安装并调试 CMake

一、前言 CMake是一个跨平台的开源工具&#xff0c;用于管理软件项目的构建过程。它不直接构建软件&#xff0c;而是生成用于特定平台或编译器的构建文件&#xff08;如Makefile或Visual Studio项目文件&#xff09;&#xff0c;然后利用这些文件来实际构建软件。 二、初次尝…

微服务架构 | 架构演进

INDEX 1 架构演进 1 架构演进 standalone 就部署一份 可用性问题&#xff1a;只有一个点&#xff0c;单点故障 全挂流量瓶颈&#xff1a; 只有一个点&#xff0c;可以支持的流量有限性能越高的服务器价格会非线性增加 功能耦合&#xff1a;协同开发困难&#xff0c;各自改一…

大数据开发-Hive介绍以及安装配置

文章目录 数据库和数据仓库的区别Hive安装配置Hive使用方式Hive日志配置 数据库和数据仓库的区别 数据库&#xff1a;传统的关系型数据库主要应用在基本的事务处理&#xff0c;比如交易&#xff0c;支持增删改查数据仓库&#xff1a;主要做一些复杂的分析操作&#xff0c;侧重…

Day34:安全开发-JavaEE应用反射机制攻击链类对象成员变量方法构造方法

目录 Java-反射-Class对象类获取 Java-反射-Field成员变量类获取 Java-反射-Method成员方法类获取 Java-反射-Constructor构造方法类获取 Java-反射-不安全命令执行&反序列化链构造 思维导图 Java知识点 功能&#xff1a;数据库操作&#xff0c;文件操作&#xff0c;…

系统安全与网络攻击

系统安全与网络攻击 Web攻击 XSS 即&#xff08;Cross Site Scripting&#xff09;中文名称为&#xff1a;跨站脚本攻击。XSS的重点不在于跨站点&#xff0c;而在于脚本的执行。 XSS的攻击原理&#xff1a;恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的…

pytorch安装记录

pytorch安装记录 1 安装anconda2 安装pycharm3 安装显卡驱动4 根据显卡驱动版本下载CUDA5 cudnn安装6 根据CUDA版本安装pytorch7 pytorch卸载 1 安装anconda 下载地址: https://www.anaconda.com/download#downloads 验证是否安装成功&#xff1a;打开cmd, 输入 conda 验证环…

基于YOLOv8的手机摄像头的自动检测系统

文章大纲 数据集网络爬虫开源数据集标注目标定义标注标准标注工具标签更换脚本自制数据集下载地址自动检测系统设计与搭建模型训练与准确率代码仓库下载地址参考文献与学习路径随着移动通信技术的飞速发展,消费者对移动终端的要求也越来越高,各厂商纷纷提出自己的特色卖点,其…

华为手机正在重回巅峰

在相对低迷的行业周期之下&#xff0c;2023年下半年智能手机行业迎来了华为的回归&#xff0c;这给本就竞争激烈的市场环境&#xff0c;带来了更大变数。 早在1月29日就有消息称&#xff0c;华为已经注册“星耀手机”品牌商标&#xff0c;定位中端手机市场&#xff0c;但相关消…

django动态表技术(根据日期,年月日)方法二

方法一&#xff1a; 第一步&#xff1a;在models创建一个类&#xff0c;里边存放数据表中需要的字段&#xff0c;如下 class TemplateModel(models.Model):NowTime models.CharField(max_length5)name models.CharFiedld(max_length5)class Meta:abstract True # 基础类设…

从Oracle迁移到openGauss实战分享

介绍 ora2og 是一个将 Oracle 数据库迁移至 openGauss 的工具&#xff0c;主要编程语言为 perl&#xff0c;通过 perl DBI 模块连接 Oracle 数据库&#xff0c;自动扫描并提取其中的对象结构及数据&#xff0c;产生 SQL 脚本&#xff0c;通过手动或自动的方式应用到 openGauss…

信息系统项目管理师002:信息系统(1信息化发展—1.1信息与信息化—1.1.2 信息系统)

文章目录 1.1.2 信息系统1.信息系统及其特性2.信息系统生命周期 记忆要点总结 1.1.2 信息系统 信息系统是由相互联系、相互依赖、相互作用的事物或过程组成的具有整体功能和综合行为的统一体。在经济与社会活动中&#xff0c;经常使用“系统”的概念&#xff0c;例如&#xff0…

C# OpenCvSharp DNN 部署yoloX

目录 效果 模型信息 项目 代码 下载 C# OpenCvSharp DNN 部署yoloX 效果 模型信息 Inputs ------------------------- name&#xff1a;images tensor&#xff1a;Float[1, 3, 640, 640] --------------------------------------------------------------- Outputs ---…

Flask python 开发篇:配置文件

配置文件相关使用介绍 一、相关介绍二、系统环境变量配置三、项目中用到的配置项3.1、直接写在主脚本里3.1、单独写在一个配置文件里 四、使用配置文件 一、相关介绍 一般来说&#xff0c;在执行flask run命令运行程序前&#xff0c;我们需要提供程序实例所在模块的位置 。 F…

Python实战:数字存储:选择合适的数据类型

在Python编程中&#xff0c;选择合适的数据类型来存储数字对于性能和内存使用至关重要。本文将深入探讨Python中的数字数据类型&#xff0c;包括整数&#xff08;int&#xff09;、浮点数&#xff08;float&#xff09;和复数&#xff08;complex&#xff09;。我们将通过具体的…

PostgreSQL教程(三十四):服务器管理(十六)之逻辑复制

逻辑复制是一种基于数据对象的复制标识&#xff08;通常是主键&#xff09;复制数据对象及其更改的方法。我们使用术语“逻辑”来与物理复制加以区分&#xff0c;后者使用准确的块地址以及逐字节的复制方式。PostgreSQL两种机制都支持。逻辑复制允许在数据复制和安全性上更细粒…

Cassandra 安装部署

文章目录 一、概述1.官方文档2. 克隆服务器3.安装准备3.1.安装 JDK 113.2.安装 Python3.3.下载文件 二、安装部署1.配置 Cassandra2.启动 Cassandra3.关闭Cassandra4.查看状态5.客户端连接服务器6.服务运行脚本 开源中间件 # Cassandrahttps://iothub.org.cn/docs/middleware/…

CI/CD笔记.Gitlab系列:2024更新后-设置GitLab导入源

CI/CD笔记.Gitlab系列 设置GitLab导入源 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_…

Spring Cloud + Nacos 集成Netty Socket.IO

项目需要集成实时消息通讯&#xff0c;所以尝试在项目中集成websocket。技术上选择了Socket.io&#xff0c;前/后端统一使用此开源项目来实现需求。 一、版本 spring cloud: 2022.0.4 注册中心&#xff1a; nacos Netty-Socket.io : 2.0.9 <dependency><groupI…

【C语言】InfiniBand驱动mlx4_register_interface函数

一、讲解 mlx4_register_interface函数是Mellanox InfiniBand驱动程序的一部分&#xff0c;这个函数的作用是注册一个新的接口(intf)到InfiniBand设备。这允许不同的子系统&#xff0c;如以太网或存储&#xff0c;能够在同一个硬件设备上注册它们各自需要的接口&#xff0c;在…

编程笔记 html5cssjs 008 HTML图片 名画欣赏

编程笔记 html5&css&js 008 HTML图片 名画欣赏 一、代码二、解释 这段HTML代码定义了一个网页&#xff0c;展示了名画欣赏的内容。主要包括页面的标题、样式定义和主体内容。其中&#xff0c;样式定义使用了CSS来控制页面的布局和外观&#xff0c;主体内容使用了结构化…