Issue
I am trying to do a Random Forest Regression using Scikit-learn. The first step after loading the data using Pandas is to split the data into a test set and a training set. However, I get the error:
The least populated class in y has only 1 member
I've searched Google and found various instances of this error, but I still can't seem to get an understanding of what this error means.
training_file = "training_data.txt"
data = pd.read_csv(training_file, sep='\t')
y = data.Result
X = data.drop('Result', axis=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123, stratify=y)
pipeline = make_pipeline(preprocessing.StandardScaler(), RandomForestRegressor(n_estimators=100))
hyperparameters = { 'randomforestregressor__max_features' : ['auto', 'sqrt', 'log2'],
'randomforestregressor__max_depth' : [None, 5, 3, 1] }
model = GridSearchCV(pipeline, hyperparameters, cv=10)
model.fit(X_train, y_train)
prediction = model.predict(X_test)
joblib.dump(model, 'ms5000.pkl')
The train_test_split
method yields this stack trace:
Traceback (most recent call last):
File "/Users/justin.shapiro/Desktop/IPML_Model/model_definition.py", line 18, in <module>
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.22, random_state=123, stratify=y)
File "/Library/Python/2.7/site-packages/sklearn/model_selection/_split.py", line 1700, in train_test_split
train, test = next(cv.split(X=arrays[0], y=stratify))
File "/Library/Python/2.7/site-packages/sklearn/model_selection/_split.py", line 953, in split
for train, test in self._iter_indices(X, y, groups):
File "/Library/Python/2.7/site-packages/sklearn/model_selection/_split.py", line 1259, in _iter_indices
raise ValueError("The least populated class in y has only 1"
ValueError: The least populated class in y has only 1 member, which is too few. The minimum number of groups for any class cannot be less than 2.
This is a sample of my dataset:
var1 var2 var3 var4 var5 var6 var7 var8 Result
high 5000.0 0 60 1000 75 0.23 0.75 17912.0
mid 5000.0 0 60 1000 50 0.23 0.75 18707.0
low 5000.0 0 60 1000 25 0.23 0.75 17912.0
high 5000.0 5 60 1000 75 0.23 0.75 18577.0
mid 5000.0 5 60 1000 50 0.23 0.75 19407.0
low 5000.0 5 60 1000 25 0.23 0.75 18577.0
What is this error and how can I get rid of it?
Solution
Error raised in this line :
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.22, random_state=123, stratify=y)
Try to delete stratify=y
Answered By - Mr_U4913
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.