Как я могу сделать классификацию с типом данных с плавающей запятой после нормализации? - PullRequest
0 голосов
/ 22 апреля 2020

Я работаю с набором данных, помеченным «Взрослый», и пытаюсь запустить KNN для нескольких столбцов, которые я превратил в новый фрейм данных, и нормализовал пару столбцов. Я получаю сообщение об ошибке ValueError: Unknown label type: 'continuous' при попытке запустить

clf = neighbors.KNeighborsClassifier()
clf.fit(X_train, y_train)

. После исследования ошибки в сети кажется, что мне нужно использовать кодировщик меток для моих данных после того, как я их нормализовал, потому что теперь float, а не int, но у меня возникли проблемы с использованием кодировщика меток. Код, который я использую:

import numpy as np ##Import necassary packages
import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import scatter_matrix
from sklearn.preprocessing import *
from sklearn.neighbors import KNeighborsClassifier 
from sklearn.model_selection import train_test_split
url2="http://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data" #Reading in Data from a freely and easily available source on the internet
Adult = pd.read_csv(url2, header=None, skipinitialspace=True) #Decoding data by removing extra spaces in cplumns with skipinitialspace=True
##Assigning reasonable column names to the dataframe
Adult.columns = ["age","workclass","fnlwgt","education","educationnum","maritalstatus","occupation",  
                 "relationship","race","sex","capitalgain","capitalloss","hoursperweek","nativecountry",
                 "less50kmoreeq50kn"]
Adult.loc[Adult.loc[:, "race"] == "Amer-Indian-Eskimo", "race"] = "Other" #consolidating catagorical data in the race column

Adult.loc[:,"race"].value_counts().plot(kind='bar') #plotting the consolidated catagorical data in the race column
plt.title('race after consolidation')
plt.show()

Adult.loc[:, "White"] = (Adult.loc[:, "race"] == "White").astype(int) #One hot encoding the catagorical/creating new categorical data in the race column
Adult.loc[:, "Black"] = (Adult.loc[:, "race"] == "Black").astype(int)
Adult.loc[:, "Asian-Pac-Islander"] = (Adult.loc[:, "race"] == "Asian-Pac-Islander").astype(int)
Adult.loc[:, "Other"] = (Adult.loc[:, "race"] == "Other").astype(int)

Adult.loc[:,"Other"] #Verifying One-hot encoding for Other column

Adult = Adult.drop("race", axis=1) #removing the obsolete column "race"

Minage = min(Adult.loc[:,"age"])  #MinMax normalizing the age column
Maxage = max(Adult.loc[:,"age"])
MinMaxage = (Adult.loc[:,"age"] - Minage)/(Maxage - Minage)

Minhours = min(Adult.loc[:,"hoursperweek"])  #MinMax ormalizing the hoursperweek column
Maxhours = max(Adult.loc[:,"hoursperweek"])
MinMaxhours = (Adult.loc[:,"hoursperweek"] - Minhours)/(Maxhours - Minhours)

df2 = pd.DataFrame() #creating a dataframe to plot the normilized data
df2.loc[:,0] = Adult.loc[:, "White"] #filling the data frame
df2.loc[:,1] = MinMaxage
df2.loc[:,2] = MinMaxhours

df2.columns = ["White","MinMaxage","MinMaxhours"]

X = np.array(df2.drop(['MinMaxhours'], 1))
y = np.array(df2['MinMaxhours'])

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)
clf = neighbors.KNeighborsClassifier()
clf.fit(X_train, y_train)

accuracy = clf.score(X_test, y_test)
print(accuracy)

clf.predict(X_test)
y_test

Может ли кто-нибудь помочь мне с маркировкой кодирования данных, чтобы я мог выполнить Knn для данных? Я посмотрел его на сайте sklearn и разных примерах, но все еще не могу использовать его в своем наборе данных. Я получаю сообщение об ошибке при попытке подгонки данных под управлением clf.fit(X_train, y_train)

1 Ответ

1 голос
/ 22 апреля 2020

Похоже, у вас есть проблема регрессии, а не проблема классификации. Вы пытаетесь предсказать переменную MinMaxHours, которая является действительным числом. Если вы пытаетесь предсказать действительное число, вам следует использовать регрессионную версию алгоритма соседей Neirest. Следующий код должен работать, чтобы получить прогноз.

from sklearn.neighbors import KNeighborsRegressor
clf = KNeighborsRegressor()
clf.fit(X_train, y_train)
y_test_pred = clf.predict(X_test)
...