python中出現非正定“Input X must be non-negative”的問題

晚上在用貝葉斯分析器處理數據時,冒出“Input X must be non-negative”這樣的提示,意思是訓練集的特徵向量組成的矩陣必須是非負矩陣,這幾天也剛好在看數值分析的內容,在python上有數值分析的內容,主要是Numpy和SymPy這兩個庫。


數據和模塊導入代碼如下:

import pandas as pd
import numpy as np
from sklearn.naive_bayes import MultinomialNB
data=pd.read_csv('column.2C.csv')
data_x=data[['V1','V2','V3','V4','V5','V6']]
y=data[['V7']]


擬合模型代碼:

clf=MultinomialNB()
clf.fit(data_x,y)

直接報出這樣的錯誤,Input X must be non-negative

檢查矩陣的相關性:

data.corr()

#得到
V1	V2	V3	V4	V5	V6
V1	1.000000	0.629225	0.718142	0.815120	-0.247644	0.639611
V2	0.629225	1.000000	0.434326	0.062655	0.035142	0.399474
V3	0.718142	0.434326	1.000000	0.598453	-0.083829	0.532955
V4	0.815120	0.062655	0.598453	1.000000	-0.344200	0.523602
V5	-0.247644	0.035142	-0.083829	-0.344200	1.000000	-0.029515
V6	0.639611	0.399474	0.532955	0.523602	-0.029515	1.000000

看似也沒有多大問題

那麼我們檢查一下矩陣的條件數

c=np.linalg.cond(data_x,p=None)
print c

49730.566337
非常的不理想,說明存在共線性,上文我們交代了條件數在1附近是理想的,有文獻表明超過15就說明存在共線性。

我們進一步計算行列式

np.linalg.inv(data_x)


得到如下的警告:
Last 2 dimensions of the array must be square
直接用原始數據的組成的矩陣,不是一個方陣,所以會報錯
max(a.shape[-2:]) != min(a.shape[-2:])

我們無法求出原始數據的行列式。


所以也無法求逆 特徵值  

最後,給出幾個矩陣求解過程中的常用命令

np.linalg.matrix_rank(data_x) #矩陣的秩
np.linalg.inv (data_x)# 求逆矩陣
np.linalg.eigvals(data_x) # 求特徵值
np.linalg.eig(data_x)   #特徵向量
np.linalg.svd(data_x)  #singular value decomposition 奇異值分解

附上數據集來源:

http://archive.ics.uci.edu/ml/datasets/Vertebral+Column



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章