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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习:朴素贝叶斯分类器,决策函数向量化处理,mask使用技巧

發(fā)布時間:2024/9/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习:朴素贝叶斯分类器,决策函数向量化处理,mask使用技巧 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 前面實現(xiàn)的樸素貝葉斯分類器,決策函數(shù)是非向量化的:
  • 借助于numpy向量化處理,相當(dāng)于并行計算,注意mask使用技巧,用途較廣:

前面實現(xiàn)的樸素貝葉斯分類器,決策函數(shù)是非向量化的:

前面提到過大數(shù)據(jù)處理,盡量避免個人的遍歷等一些函數(shù)的操作,要借助numpy的強大功能,如下預(yù)測函數(shù)是按照我們平常習(xí)慣寫的,先處理一個數(shù)據(jù),處理多個數(shù)據(jù),就是重復(fù)調(diào)用單個處理函數(shù)。

# ============================================================================= # 模型的評估和預(yù)測 # ============================================================================= # 定義預(yù)測單一樣本的函數(shù) # 參數(shù)get_raw_result為控制函數(shù)是輸出類別(False)還是輸出后驗概率(True)def predict_one(self,x,get_raw_result=False):# 將輸入的數(shù)據(jù)數(shù)值化,如果是numpy數(shù)組,轉(zhuǎn)化成python的list# 這時因為python在數(shù)值化這個操作上list比較快if isinstance(x,np.ndarray):x = x.tolist()else:x = x[:]# 調(diào)用相關(guān)方法數(shù)值化,該方法具體的模型不同而不同x = self._transfer_x(x)# 類別和該類別的后驗概率,存的是當(dāng)前最大的m_arg,m_probability = 0,0# 遍歷各個類別找到最大的后驗概率的類別for i in range(len(self._cat_counter)):# 決策函數(shù)p = self._func(x,i)if p > m_probability:m_arg,m_probability = i, pif not get_raw_result:return self.label_dic[m_arg]return m_probability# 預(yù)測多個樣本,就是重復(fù)調(diào)用一個樣本def predict(self,x,get_raw_result=False):return np.array([self.predict_one(xx,get_raw_result) for xx in x])# ============================================================================= # # 利用self._data生成決策函數(shù) # =============================================================================def func(input_x,tar_category):rs =1# 遍歷各個緯度,利用data和條件獨立假設(shè)計算聯(lián)合條件概率# d,xx:feature,featureValuefor d,xx in enumerate(input_x):rs *= data[d][tar_category][xx]# 利用先驗概率和聯(lián)合條件概率計算后驗概率return rs*p_category[tar_category]

借助于numpy向量化處理,相當(dāng)于并行計算,注意mask使用技巧,用途較廣:

# ============================================================================= # 前面處理的方式為一個一個處理,現(xiàn)在使用向量化的方式 # =============================================================================def predict_vector(self,x,get_raw_result=False):# 將輸入的數(shù)據(jù)數(shù)值化,如果是numpy數(shù)組,轉(zhuǎn)化成python的list# 這時因為python在數(shù)值化這個操作上list比較快if isinstance(x,np.ndarray):x = x.tolist()else:x = x[:]# 調(diào)用相關(guān)方法數(shù)值化,該方法具體的模型不同而不同x = self._transfer_x(x)# 類別和該類別的后驗概率,存的是當(dāng)前最大的,現(xiàn)在是向量了,長度為x的長度m_arg,m_probability = np.zeros(len(x)),np.zeros(len(x))# 遍歷各個類別找到最大的后驗概率的類別for i in range(len(self._cat_counter)):# 決策函數(shù),這里應(yīng)該是返回的是向量,len(x)數(shù)據(jù)的后驗概率p = self._func(x,i)# 這里類似于前面的labels = [y == value for value in range(len(cat_counter))]# 把滿足條件的矩陣mask出倆了_mask = p > m_probabilitym_arg[_mask],m_probability[_mask] = i, p[_mask]if not get_raw_result:return np.array([self.label_dic[arg] for arg in m_arg])return m_probability # ============================================================================= # 決策函數(shù)向量化處理 # =============================================================================def func_vector(input_x,tar_category):# 將輸入數(shù)據(jù)為[N個數(shù)據(jù),n個屬性],我們需要向量化處理,向量是一行一行處理的# 我們一次處理N個數(shù)據(jù)的一個屬性,需要轉(zhuǎn)置數(shù)據(jù)# 為了操作,先轉(zhuǎn)化為numpyinput_x = np.atleast_2d(input_x).T# rs就是后驗概率,大小應(yīng)該為數(shù)據(jù)N,初始值為1rs =np.ones(input_x.shape[1])# 遍歷各個緯度,利用data和條件獨立假設(shè)計算聯(lián)合條件概率# d,xx:feature,featureValuefor d,xx in enumerate(input_x):# 這里代碼沒有改變,但是都是向量的操作,[xx]是不是很奇怪,xx是一個# 向量,numpy支持對向量的操作rs *= self._data[d][tar_category][xx]# 利用先驗概率和聯(lián)合條件概率計算后驗概率return rs*p_category[tar_category]

總結(jié)

以上是生活随笔為你收集整理的机器学习:朴素贝叶斯分类器,决策函数向量化处理,mask使用技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。