我一直在尝试使用基于决策树算法的模型从DataFrame中进行预测。
我的模型得分为0.96。然后,我尝试使用该模型对留下但出现错误的DataFrame人员进行预测。目标是根据留下来的DataFrame来预测将来将离开公司的人员。
如何实现该目标?
所以我做的是:
df = pd.read_csv('https://raw.githubusercontent.com/bhaskoro-muthohar/DataScienceLearning/master/HR_comma_sep.csv')
leftdf = df[df['left']==1]
notleftdf =df[df['left']==0]
df.salary = df.salary.map({'low':0,'medium':1,'high':2})
df.salary
X = df.drop(['left','sales'],axis=1)
y = df['left']
import numpy as np
from sklearn.model_selection import train_test_split
#splitting the train and test sets
X_train, X_test, y_train, y_test= train_test_split(X,y,random_state=0, stratify=y)
from sklearn import tree
clftree = tree.DecisionTreeClassifier(max_depth=3)
clftree.fit(X_train,y_train)
y_pred = clftree.predict(X_test)
print("Test set prediction:\n {}".format(y_pred))
print("Test set score: {:.2f}".format(clftree.score(X_test, y_test)))
结果是
测试集分数:0.96
X_new = notleftdf.drop(['left','sales'],axis=1)
#Map salary to 0,1,2
X_new.salary = X_new.salary.map({'low':0,'medium':1,'high':2})
X_new.salary
prediction_will_left = clftree.predict(X_new)
print("Prediction: {}".format(prediction_will_left))
print("Predicted target name: {}".format(
notleftdf['left'][prediction_will_left]
))
我得到的错误是:
KeyError: "None of [Int64Index([0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n ...\n 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],\n dtype='int64', length=11428)] are in the [index]"
如何解决?
PS:对于完整脚本链接为here
也许您正在寻找类似的东西。 (将the data file下载到同一目录后,该脚本便会包含在内。)>
from sklearn import tree
from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd
def process_df_for_ml(df):
"""
Process a dataframe for model training/prediction use.
Returns X/y tensors.
"""
df = df.copy()
# Map salary to 0,1,2
df.salary = df.salary.map({"low": 0, "medium": 1, "high": 2})
# dropping left and sales X for the df, y for the left
X = df.drop(["left", "sales"], axis=1)
y = df["left"]
return (X, y)
# Read and reindex CSV.
df = pd.read_csv("HR_comma_sep.csv")
df = df.reindex()
# Train a decision tree.
X, y = process_df_for_ml(df)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0, stratify=y)
clftree = tree.DecisionTreeClassifier(max_depth=3)
clftree.fit(X_train, y_train)
# Test the decision tree on people who haven't left yet.
notleftdf = df[df["left"] == 0].copy()
X, y = process_df_for_ml(notleftdf)
# Plug in a new column with ones and zeroes from the prediction.
notleftdf["will_leave"] = clftree.predict(X)
# Print those with the will-leave flag on.
print(notleftdf[notleftdf["will_leave"] == 1])