日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

“双月”数据集的生成

發布時間:2024/3/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 “双月”数据集的生成 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? “雙月”數據集的生成

問題描述:

最近在看《神經網絡與機器學習》一書,里面的實驗都是使用的“雙月”數據集,如圖所示:

但是書中并沒有給出這個數據集的來源或者生成方式,所以我自己根據圖中的描述信息,利用python來生成數據集,考慮到問題的靈活性,所以并沒有把數據集存儲下來,而是需要用的時候再生成。

實現思路:

基本假設:

  • 區域A固定不動
  • 區域B的圓心可以隨著d的不同以及r的不同而調整
  • 區域A和區域B的半徑相同
  • 半徑r表示圓心到圓環中部的位置
  • 半圓的生成:(參數方程表示)

  • 半徑:(均勻分布)
  • 角度:區域A?,區域B??(角度都是均勻分布)
  • 代碼實現:

    import numpy as np import matplotlib.pyplot as pltdef generate_data(n, r=10, w=6, d=1):theta1 = np.random.uniform(0, np.pi, size=n)theta2 = np.random.uniform(-np.pi, 0, size=n)w1 = np.random.uniform(-w/2, w/2, size=n)w2 = np.random.uniform(-w/2, w/2, size=n)one = np.ones_like(theta1)# data_A_i = [1, coord_x, coord_y, label], label = 1 or -1data_A = np.array([one, (r+w1)*np.cos(theta1), (r+w1)*np.sin(theta1), one]).Tdata_B = np.array([one, r + (r+w2)*np.cos(theta2), -d + (r+w2)*np.sin(theta2), -one]).Treturn data_A, data_Bclass Data:def __init__(self, n, r=10, w=6, d=1):self.n = n # 數據對數,A、B區域各有n個點self.r = r # 半徑self.w = w # 圓環的寬度self.d = d # 區域B的向下偏移量self.data_A = [] # 區域A的數據集self.data_B = [] # 區域B的數據集self.data_AB = [] # 混合區域A和區域B的數據集def get_data(self):self.data_A, self.data_B = generate_data(self.n, self.r, self.w, self.d)all_data = np.vstack([self.data_A,self.data_B])np.random.shuffle(all_data)self.data_AB = all_datadef plot(self):fig = plt.figure()plt.scatter(self.data_A[:, 1], self.data_A[:, 2], marker='x')plt.scatter(self.data_B[:, 1], self.data_B[:, 2], marker='+')plt.show()if __name__ == "__main__":# data_A, data_B = generate_data(1000)# print(data_A)# print(data_B)# fig = plt.figure()# plt.scatter(data_A[:,1], data_A[:, 2], marker='x')# plt.scatter(data_B[:,1], data_B[:, 2], marker='+')# plt.show()data_set = Data(1000)data_set.get_data()print(data_set.data_AB)data_set.plot()

    示例:

    n = 1000,r = 10,w = 6,d = 1.

    ?

    注:

  • 當時生成數據是為了模式分類實驗去的,所以生成的數據帶有偏置項,同時帶有標簽項(區域A為+1,區域B為-1),如果有需要可以自行處理。
  • 目前編程菜鳥一只,不會面向對象編程卻硬要寫,大佬勿噴!如有疑問,敬請評論!
  • 總結

    以上是生活随笔為你收集整理的“双月”数据集的生成的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。