学习逻辑机器学习遇报错:DataFrame无_validate_params属性
AttributeError: 'DataFrame' object has no attribute '_validate_params' 错误排查与解决
错误原因
你犯了sklearn使用中的典型错误:将LogisticRegression类别名为lr后,直接调用了类的fit方法(lr.fit(x_train,y_train))。fit是实例方法,必须先创建类的实例才能调用。
当你直接用类调用fit时,Python会把第一个参数x_train(DataFrame对象)当作类方法的self参数传入,而DataFrame显然没有_validate_params这个sklearn模型类专属的方法,因此抛出了该错误。
解决方法
只需先创建LogisticRegression的实例,再调用实例的方法即可。修改代码中模型训练的部分:
# 替换原有的 lr.fit(x_train,y_train) 和 x_pred = lr.predict(x_test) model = lr() # 创建LogisticRegression实例 model.fit(x_train,y_train) x_pred = model.predict(x_test)
修改后的完整代码
import seaborn as sb import matplotlib.pyplot as plt import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression as lr from sklearn import metrics lol = {"exp":[0,2,5,6,10,7,9,3,5,4,6,1,2,0,0,4,5,8,7,6], "sales":[10,20,15,12,14,18,19,20,25,10,5,7,8,20,15,17,18,25,14,17], "manage":[5,2,9,8,3,6,7,5,4,2,1,5,8,7,9,4,2,0,1,5], "get":[0,1,1,1,0,0,1,1,0,1,0,1,0,1,0,1,1,0,0,1]} data = pd.DataFrame(lol,columns=["exp","sales","manage","get"]) x = data[["exp", "sales", "manage"]] y = data["get"] x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=0) # 修复:先创建模型实例 model = lr() model.fit(x_train,y_train) x_pred = model.predict(x_test) conf_mat = pd.crosstab(y_test,x_pred,rownames="True?",colnames="Pred") sb.heatmap(conf_mat,annot=True) print("Accuracy:" ,metrics.accuracy_score(y_test,x_pred)) plt.show()
你也可以选择不使用别名,直接写LogisticRegression()来实例化模型,效果完全一致。
内容的提问来源于stack exchange,提问作者Tejash Soni
相关产品推荐
相关产品推荐

