Sklearn中的UndefinedMetricWarning

时间:2019-01-08 20:29:40

标签: python scikit-learn

我无法在最终的图形中看到最终的准确性得分,并且在没有看到0的位置,我得到的精度/召回率定义不明确。

我正在使用以下酵母数据:https://archive.ics.uci.edu/ml/machine-learning-databases/yeast/yeast.data

我尝试通过使train_frac = 1来使整套训练集完整。

import pandas as pd
import numpy as np
%matplotlib inline
from matplotlib import pyplot as plt
from sklearn.naive_bayes import GaussianNB

df = pd.read_csv("<my_dir>",names = ['sample','mcg', 'gvh', 'alm', 'mit', 'erl', 'pox', 'vac', 'nuc','site'])
df=df.drop(columns=['sample'])
model_type = GaussianNB()
target = 'site'
train_frac = 0.5

Y = df[target]
df2 = df.drop(columns=[target])
dtype='object'). Everything but site.
X = df[df2.columns[:]] 

def naive_split(X, Y, n):
    # Take first n lines of X and Y for training and the rest for testing
    X_train = X[:n]
    X_test  = X[n:]
    Y_train = Y[:n]
    Y_test  = Y[n:]
    return (X_train, X_test, Y_train, Y_test)

def train_model(n=int(train_frac*df.shape[0])):
    X_train, X_test, Y_train, Y_test = naive_split(X, Y, n)
    clf = model_type
    clf = clf.fit(X_train, Y_train)
    return (X_test, Y_test, clf)

X_test, Y_test, clf = train_model()

import sklearn.metrics as metrics
from sklearn import model_selection
sizes = np.arange(0.98,0.01, -0.02)
result = {}
for size in sizes:
    X_train, X_test, Y_train, Y_test = model_selection.train_test_split(
    X, Y, test_size=size, random_state=200)
    clf = model_type
    clf = clf.fit(X_train, Y_train)
    score     = clf.score(X_test, Y_test)
    precision = metrics.precision_score(Y_test, clf.predict(X_test), average='weighted')
    recall    = metrics.recall_score(Y_test, clf.predict(X_test), average='weighted')
    result[len(Y_train)] = (score, precision, recall)
result = pd.DataFrame(result).transpose()
result.columns = ['Accuracy','Precision', 'Recall']
result.plot(marker='*', figsize=(15,5))
plt.title('Metrics measures using random train/test splitting')
plt.xlabel('Size of training set')
plt.ylabel('Value');

我希望它运行无误时会得到以下结果:

C:\Users\<user>\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\metrics\classification.py:1135: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples.'precision', 'predicted', average, warn_for)

C:\Users\<user>\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\metrics\classification.py:1137: UndefinedMetricWarning: Recall is ill-defined and being set to 0.0 in labels with no true samples. 'recall', 'true', average, warn_for)  

0 个答案:

没有答案