疑惑的兔子 2022-11-24 17:08 采纳率: 55.6%
浏览 17
已结题

python计算决策区域伪彩图面积

问题遇到的现象和发生背景

计划通过kmeans算法将大的区域进行划分,并计算每个小区域中目标存在概率

用代码块功能插入代码,请勿粘贴截图
from sklearn.cluster import KMeans
import math
import numpy as np
import matplotlib.pyplot as plt
import numpy.random as rd
import pandas as pd
from matplotlib.colors import ListedColormap

rdata = rd.randint(1, 100, size=(20, 2), dtype=int)
dataSet = np.array(rdata)
x = dataSet[:, 0]
y = dataSet[:, 1]

# 使用特征值来绘制决策边界,先获取特征的最大值与最小值
# 获取边界范围
# +n -n的操作可以理解为防止样本落在图的边缘处
x_min, x_max = x.min() - 3, x.max() + 3
y_min, y_max = y.min() - 3, y.max() + 3

# 在指定的大间隔内,返回固定间隔的数据
tx = np.linspace(x_min, x_max)
ty = np.linspace(y_min, y_max)

# 通过获取的x和y的值来生成要绘制的每一个点的坐标
xx = np.arange(x_min, x_max)
yy = np.arange(y_min, y_max)
# 生成网格点坐标矩阵
grid_x = np.meshgrid(xx, yy)

# 聚类算法
model = KMeans(n_clusters=10, init='k-means++')
KM = model.fit_predict(dataSet)
# 聚类中心计算
center = pd.DataFrame(model.cluster_centers_)
# 聚类中心转化为数组
c = np.array(center)

# 统计每个簇中样本个数
l = np.zeros((10, 1))
for i in range(0, len(KM)):
    if KM[i] == 0:
        l[0] += 1
    elif KM[i] == 1:
        l[1] += 1
    elif KM[i] == 2:
        l[2] += 1
    elif KM[i] == 3:
        l[3] += 1
    elif KM[i] == 4:
        l[4] += 1
    elif KM[i] == 5:
        l[5] += 1
    elif KM[i] == 6:
        l[6] += 1
    elif KM[i] == 7:
        l[7] += 1
    elif KM[i] == 8:
        l[8] += 1
    elif KM[i] == 9:
        l[9] += 1

# 需要把所有的颜色值变为与形状相符的矩形形状,即每个决策边界所在位置坐标的集合
flat_x = np.c_[grid_x[0].ravel(), grid_x[1].ravel()]
flat_y = model.predict(flat_x)
grid_y = flat_y.reshape(grid_x[1].shape)

# 创建一个带有不规则矩形网格的伪彩色图
plt.pcolormesh(grid_x[0], grid_x[1], grid_y, alpha=0.3, cmap='Paired')

plt.scatter(x, y, c=y, s=30, edgecolors='#FFFFFF', zorder=1)
# 聚类中心绘制
plt.scatter(center[0], center[1], cmap=ListedColormap('#FFFFFF'), marker='X')
# 将每一个聚类中心视为每个区域的中心点,从而计算两个区域之间的距离

# 画布
plt.title('area')
plt.xlabel('X')
plt.ylabel('Y')

plt.show()


运行结果及报错内容

img

我的解答思路和尝试过的方法

如图所示,一共分为10个小区域,并且用不同颜色进行标注,希望可以计算每个不同颜色区域的面积,并结合每个区域内的样本数计算目标存在概率
我的解决方法:采用基于计算机图像获取每个小区域的轮廓,但是失败了
每个簇内样本点个数的获取已经实现,目前最大的问题就是计算每个区域的面积

我想要达到的结果

计算不同颜色的区域面积,并且对每个颜色的区域进行标号,将面积与区域进行一一对应,进而计算每个区域内目标存在概率

  • 写回答

2条回答 默认 最新

  • 疑惑的兔子 2022-12-08 17:53
    关注

    由于我的产生的结果类似于Voronoi图,因此我借助了Voronoi图的思想解决了该问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月16日
  • 已采纳回答 12月8日
  • 修改了问题 11月29日
  • 修改了问题 11月28日
  • 展开全部

悬赏问题

  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 Ubuntu开机显示器只显示kernel,是没操作系统(相关搜索:显卡驱动)
  • ¥15 VB.NET如何绘制倾斜的椭圆
  • ¥15 arbotix没有/cmd_vel话题
  • ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据
  • ¥15 用C语言怎么判断字符串的输入是否符合设定?
  • ¥15 通信专业本科生论文选这两个哪个方向好研究呀
  • ¥50 我在一个购物网站的排队系统排队,这个排队到号后重新定向到目标网站进行购物,但是有技术牛通过技术方法直接跳过排队系统进入目标网址购物,有没有什么软件或者脚本可以用