机器学习:朴素贝叶斯分类器,决策函数向量化处理,mask使用技巧
生活随笔
收集整理的這篇文章主要介紹了
机器学习:朴素贝叶斯分类器,决策函数向量化处理,mask使用技巧
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前面實現的樸素貝葉斯分類器,決策函數是非向量化的:
- 借助于numpy向量化處理,相當于并行計算,注意mask使用技巧,用途較廣:
前面實現的樸素貝葉斯分類器,決策函數是非向量化的:
前面提到過大數據處理,盡量避免個人的遍歷等一些函數的操作,要借助numpy的強大功能,如下預測函數是按照我們平常習慣寫的,先處理一個數據,處理多個數據,就是重復調用單個處理函數。
# ============================================================================= # 模型的評估和預測 # ============================================================================= # 定義預測單一樣本的函數 # 參數get_raw_result為控制函數是輸出類別(False)還是輸出后驗概率(True)def predict_one(self,x,get_raw_result=False):# 將輸入的數據數值化,如果是numpy數組,轉化成python的list# 這時因為python在數值化這個操作上list比較快if isinstance(x,np.ndarray):x = x.tolist()else:x = x[:]# 調用相關方法數值化,該方法具體的模型不同而不同x = self._transfer_x(x)# 類別和該類別的后驗概率,存的是當前最大的m_arg,m_probability = 0,0# 遍歷各個類別找到最大的后驗概率的類別for i in range(len(self._cat_counter)):# 決策函數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# 預測多個樣本,就是重復調用一個樣本def predict(self,x,get_raw_result=False):return np.array([self.predict_one(xx,get_raw_result) for xx in x])# ============================================================================= # # 利用self._data生成決策函數 # =============================================================================def func(input_x,tar_category):rs =1# 遍歷各個緯度,利用data和條件獨立假設計算聯合條件概率# d,xx:feature,featureValuefor d,xx in enumerate(input_x):rs *= data[d][tar_category][xx]# 利用先驗概率和聯合條件概率計算后驗概率return rs*p_category[tar_category]借助于numpy向量化處理,相當于并行計算,注意mask使用技巧,用途較廣:
# ============================================================================= # 前面處理的方式為一個一個處理,現在使用向量化的方式 # =============================================================================def predict_vector(self,x,get_raw_result=False):# 將輸入的數據數值化,如果是numpy數組,轉化成python的list# 這時因為python在數值化這個操作上list比較快if isinstance(x,np.ndarray):x = x.tolist()else:x = x[:]# 調用相關方法數值化,該方法具體的模型不同而不同x = self._transfer_x(x)# 類別和該類別的后驗概率,存的是當前最大的,現在是向量了,長度為x的長度m_arg,m_probability = np.zeros(len(x)),np.zeros(len(x))# 遍歷各個類別找到最大的后驗概率的類別for i in range(len(self._cat_counter)):# 決策函數,這里應該是返回的是向量,len(x)數據的后驗概率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 # ============================================================================= # 決策函數向量化處理 # =============================================================================def func_vector(input_x,tar_category):# 將輸入數據為[N個數據,n個屬性],我們需要向量化處理,向量是一行一行處理的# 我們一次處理N個數據的一個屬性,需要轉置數據# 為了操作,先轉化為numpyinput_x = np.atleast_2d(input_x).T# rs就是后驗概率,大小應該為數據N,初始值為1rs =np.ones(input_x.shape[1])# 遍歷各個緯度,利用data和條件獨立假設計算聯合條件概率# d,xx:feature,featureValuefor d,xx in enumerate(input_x):# 這里代碼沒有改變,但是都是向量的操作,[xx]是不是很奇怪,xx是一個# 向量,numpy支持對向量的操作rs *= self._data[d][tar_category][xx]# 利用先驗概率和聯合條件概率計算后驗概率return rs*p_category[tar_category]總結
以上是生活随笔為你收集整理的机器学习:朴素贝叶斯分类器,决策函数向量化处理,mask使用技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习:朴素贝叶斯分类器代码实现,决策
- 下一篇: 机器学习:决策树及ID3,C4.5,CA