以数字表示的回归算法可以很好地工作。很清楚如何对包含数字的数据进行回归并预测输出。但是,我需要对包含分类特征的数据进行回归分析。我有一个csv文件,其中包含两列install-id和page-name都是对象类型。我需要提供install-id作为输入,并将页面名称预测为输出。下面是我的代码。请帮助我。
import pandas as pd
data = pd.read_csv("/Users/kashifjilani/Downloads/csv/newjsoncontent.csv")
X = data["install-id"]
Y = data["endPoint"]
X = pd.get_dummies(data=X, drop_first=True)
from sklearn import linear_model
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = .20, random_state = 40)
regr = linear_model.LinearRegression()
regr.fit(X_train, Y_train)
predicted = regr.predict(X_test)
答案 0 :(得分:0)
对于演示来说,假设您有一个数据框,其中IQ
和Gender
是输入要素。目标变量为Test Score
。
| Student | IQ | Gender | Test Score |
|----------:|-----:|:---------|-------------:|
| 1 | 125 | Male | 93 |
| 2 | 120 | Female | 86 |
| 3 | 115 | Male | 96 |
| 4 | 110 | Female | 81 |
| 5 | 105 | Male | 92 |
| 6 | 100 | Female | 75 |
| 7 | 95 | Male | 84 |
| 8 | 90 | Female | 77 |
| 9 | 85 | Male | 73 |
| 10 | 80 | Female | 74 |
在这里,IQ
是数字,而Gender
是分类特征。在预处理步骤中,我们将在数字上应用简单的imputer,在分类特征上应用单热编码器。您可以为此使用sklearn's
Pipeline
和ColumnTransformer
功能。然后,您可以使用选择的模型轻松地进行训练和预测。
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import OneHotEncoder
from sklearn.impute import SimpleImputer
from sklearn import linear_model
# defining the data
d = {
"Student": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
"IQ": [125, 120, 115, 110, 105, 100, 95, 90, 85, 80,],
"Gender": [
"Male",
"Female",
"Male",
"Female",
"Male",
"Female",
"Male",
"Female",
"Male",
"Female",
],
"Test Score": [93, 86, 96, 81, 92, 75, 84, 77, 73, 74],
}
# converting into pandas dataframe
df = pd.DataFrame(d)
# setting the student id as index to keep track
df = df.set_index("Student")
# column transformation
categorical_columns = ["Gender"]
numerical_columns = ["IQ"]
# determine X
X = df[categorical_columns + numerical_columns]
y = df["Test Score"]
# train test split
X_train, X_test, y_train, y_test = train_test_split(
X, y, random_state=42, test_size=0.3
)
# categorical pipeline
categorical_pipe = Pipeline([("onehot", OneHotEncoder(handle_unknown="ignore"))])
# numerical pipeline
numerical_pipe = Pipeline([("imputer", SimpleImputer(strategy="mean")),])
# aggregating both the pipeline
preprocessing = ColumnTransformer(
[
("cat", categorical_pipe, categorical_columns),
("num", numerical_pipe, numerical_columns),
]
)
rf = Pipeline(
[("preprocess", preprocessing), ("classifier", linear_model.LinearRegression())]
)
# train
rf.fit(X_train, y_train)
# predict
predict = rf.predict(X_test)
这表明,
>> array([84.48275862, 84.55172414, 79.13793103])
答案 1 :(得分:0)
我认为在这里我们必须记住回归模型的假设。因为我们试图预测/识别自变量(X)和因变量(y)之间的趋势。 -线性可分离 -自变量具有受限的多重共线性。 -同方性
如您的示例中所述,您只有一个自变量,并且总结X和y之间的趋势都应该是线性的。
以一个示例为例,您给了一个任务来预测行程的总行程时间。并且您的数据集具有以下变量 IV-行驶里程,交付数量,汽油价格和城市 DV-旅行时间
在这里您可以看到它是数值(行进的英里数,GasPrice)和分类变量(NoOfDeliveries,城市)的混合体。现在,您必须将这些分类变量编码为数字(以便进行回归分析)并预测输出。
要将分类变量编码为二进制格式,我们在这里使用sklearn库中的2个对象 -LabelEncoder和OneHotEncoder。
请点击以下链接以了解更多有关如何处理的信息 Categorical variables
请找到以下链接以了解有关Dummy variable Trap的更多信息
请找到以下链接,以了解有关构建简单的Linear regression model
的更多信息