什么是分类任务和回归任务
2026/4/25 15:32:33 网站建设 项目流程

什么的分类任务和回归任务

分类

回归


1. 分类任务 —— 像“给水果贴标签”

问题:你面前有一个水果,你要判断它是苹果、香蕉还是橘子。

怎么做
你瞅一眼它的颜色、形状、大小——

  • 红色的、圆圆的 → 苹果
  • 黄色的、弯弯的 → 香蕉
  • 橙色的、圆圆的 → 橘子

结果:说出一个类别,比如“这是苹果”。
不会说“这是70%的苹果”或“这是一个2.5的苹果”。

核心特点

  • 答案是固定的几个选项之一(苹果/香蕉/橘子)。
  • 像做选择题

生活中的例子

  • 判断一封邮件是垃圾邮件还是正常邮件。
  • 人脸识别:这是小明、小红、还是陌生人。

2. 回归任务 —— 像“猜菜的温度”

问题:你刚端上一碗汤,你要猜它有多少摄氏度。

怎么做

  • 看到汤冒热气,手靠近觉得很烫 → 大概80度。
  • 如果只是温热,手能一直摸碗边 → 大概40度。

结果:说一个具体的数字,比如“大概75度”。
可以是一个连续的数字(72.3度、75度、80.5度),而不是只分“烫、温、凉”三种。

核心特点

  • 答案是一个数字,而且可以是小数,范围很大。
  • 像做填空题,要填出具体数值。

生活中的例子

  • 预测明天最高气温是31.5度。
  • 根据房子面积、卧室数,预测房价是250万元。

3. 一句话区分

  • 分类:问“是哪一个?” → 答案从几个名字里挑一个。
  • 回归:问“数值是多少?” → 答案是一个数字。

再举个极端简化的例子

  • 看一个人的身高(175cm)→ 判断他是“高、中、矮” → 分类。
  • 看一个人的长相和体重 → 猜他具体多少厘米(如175.3cm) → 回归。

4. 一个小注意(不用记,仅了解)

有时候容易混:

  • 如果选项是“0~10岁、11~20岁、21岁以上”,那是分类(几个年龄段)。
  • 如果直接预测“27岁”,那是回归(具体数字)。

只要记住:

分类是选标签,回归是算数字。


分类任务

importtorchimporttorch.nnas nnimporttorch.optimas optimimportmatplotlib.pyplotas pltimportnumpyas np #==========解决中文乱码(复制这5行)==========plt.rcParams['font.sans-serif']=['SimHei']# 用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号 #============================================#----------1.生成模拟数据----------# 假设有500个人 np.random.seed(42)n_samples=500# 健康水平(0~10),财富水平(0~10)health=np.random.rand(n_samples)*10wealth=np.random.rand(n_samples)*10# 规则:如果 健康+财富>10分,则幸福(标签=1),否则不幸福(标签=0) # 这样既有规律,又有少量边界噪音,更真实些 happiness=(health+wealth>10).astype(float)# 故意加5%的随机错误标签,让数据不那么完美 noise_mask=np.random.rand(n_samples)<0.05happiness[noise_mask]=1-happiness[noise_mask]# 转换成 PyTorch 张量 X=torch.tensor(np.column_stack((health,wealth)),dtype=torch.float32)y=torch.tensor(happiness,dtype=torch.float32).reshape(-1,1)print(f"数据大小: {X.shape} 标签大小: {y.shape}")#----------2.定义神经网络(简单到不行)----------classSimpleClassifier(nn.Module):def__init__(self):super().__init__()# 输入:2个特征(健康、财富) # 隐藏层:4个神经元 # 输出:1个神经元(0~1之间的概率) self.net=nn.Sequential(nn.Linear(2,4),nn.ReLU(),nn.Linear(4,1),nn.Sigmoid()# 最后压到0~1之间,表示幸福的概率)defforward(self,x):returnself.net(x)model=SimpleClassifier()#----------3.损失函数和优化器----------# 二分类用 BCE 损失(Binary Cross Entropy) criterion=nn.BCELoss()optimizer=optim.Adam(model.parameters(),lr=0.1)#----------4.训练----------epochs=500forepoch inrange(epochs):# 前向传播 outputs=model(X)loss=criterion(outputs,y)# 反向传播优化 optimizer.zero_grad()loss.backward()optimizer.step()if(epoch+1)%100==0:print(f"Epoch {epoch + 1}/{epochs}, Loss: {loss.item():.4f}")#----------5.评估准确率----------with torch.no_grad():predicted=model(X)predicted_class=(predicted>=0.5).float()accuracy=(predicted_class==y).float().mean()print(f"\n模型在训练集上的准确率: {accuracy.item() * 100:.1f}%")#----------6.可视化结果(画个区域图)----------defpredict_grid(health_grid,wealth_grid):grid_points=np.column_stack((health_grid.ravel(),wealth_grid.ravel()))grid_tensor=torch.tensor(grid_points,dtype=torch.float32)with torch.no_grad():probs=model(grid_tensor).numpy()returnprobs.reshape(health_grid.shape)# 生成密集网格用于画图 h_grid,w_grid=np.meshgrid(np.linspace(0,10,200),np.linspace(0,10,200))z_grid=predict_grid(h_grid,w_grid)plt.figure(figsize=(8,6))# 画决策区域(红色=不幸福,绿色=幸福) plt.contourf(h_grid,w_grid,z_grid,levels=20,cmap='RdYlGn',alpha=0.7)# 画原始数据点 plt.scatter(health[happiness==0],wealth[happiness==0],color='red',label='不幸福',alpha=0.5,edgecolors='k')plt.scatter(health[happiness==1],wealth[happiness==1],color='green',label='幸福',alpha=0.5,edgecolors='k')plt.xlabel('健康水平 (0~10)',fontsize=12)plt.ylabel('财富水平 (0~10)',fontsize=12)plt.title('幸福分类任务(健康 vs 财富)',fontsize=14)plt.legend()plt.colorbar(label='预测幸福的概率')plt.grid(alpha=0.3)plt.show()

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询