试图写入pickle文件时找不到对象



我正在尝试使用随机向量森林进行癌症检测。我试图通过使用命令pickle.dump(forest,open("model.pkl","wb")制作pickle文件,但我得到一个名称错误

NameError                                 Traceback (most recent call last)
c:Usershpnewtestpcancer.ipynb Cell 6' in <cell line: 1>()
----> 1 pickle.dump(forest,open("model.pkl","wb"))
NameError: name 'forest' is not defined

这是我的源代码检测:

import numpy as np
import pandas as pd
import warnings as wr
#Ignoring warnings
from sklearn.exceptions import UndefinedMetricWarning
wr.filterwarnings("ignore", category=UndefinedMetricWarning)
import pickle
df=pd.read_csv('Prostate_cancer_data.csv')
print(df.head(10))
print(df.shape)
print(df.isna().sum())

df=df.dropna(axis=1)#Drop the column with empty data
df=df.drop(['id'],axis=1)

#Encoding first column
from sklearn.preprocessing import LabelEncoder
labelencoder_X=LabelEncoder() 
df.iloc[:,0]=labelencoder_X.fit_transform(df.iloc[:,0].values)
#Splitting data for dependence
X=df.iloc[:,1:].values
Y=df.iloc[:,0].values
#Train-Test split
from sklearn.model_selection import train_test_split
X_train,X_test,Y_train,Y_test=train_test_split(X,Y,test_size=0.25,random_state=1)

#Standard scaling
from sklearn.preprocessing import StandardScaler
sc=StandardScaler()
X_train=sc.fit_transform(X_train)
X_test=sc.fit_transform(X_test)

from sklearn.ensemble import RandomForestClassifier
def models(X_train,Y_train):
#Random forest classifier
forest=RandomForestClassifier(n_estimators=10,criterion='entropy',random_state=0)
forest.fit(X_train,Y_train)
print("Random Forest:",forest.score(X_train,Y_train))
return forest
print("Accuracy")
model=models(X_train,Y_train)
model=models(X_train,Y_train) 

这部分代码没有按顺序缩进。所以它是一个局部声明和动作作为递归调用

代码的最后一部分有缩进问题。这是正确缩进的代码当你创建一个pickle文件时你将在其中写入模型对象而不是森林因为森林在名为model

的对象中返回
from sklearn.ensemble import RandomForestClassifier
def models(X_train,Y_train):
#Random forest classifier
forest=RandomForestClassifier(n_estimators=10,criterion='entropy',random_state=0)
forest.fit(X_train,Y_train)
print("Random Forest:",forest.score(X_train,Y_train))
return forest
print("Accuracy")
model=models(X_train,Y_train)
pickle.dump(model,open("model.pkl","wb"))

最新更新