<p>在带有分类变量的线性回归中,您应该小心伪变量陷阱。虚拟变量陷阱是一种自变量是多重共线性的情况,即两个或多个变量高度相关的情况;简单地说,一个变量可以从其他变量中预测出来。这会产生模型的奇点,这意味着你的模型无法工作。<a href="http://www.algosome.com/articles/dummy-variable-trap-regression.html" rel="noreferrer">Read about it here</a></p>
<p>其思想是对<code>drop_first=True</code>使用伪变量编码,这将在将分类变量转换为伪/指示符变量之后从每个类别中省略一列。这样做不会丢失相关信息,因为数据集中的所有点都可以由其他特性完全解释。</p>
<p><strong>以下是有关如何为作业数据集执行此操作的完整代码</strong></p>
<p>所以你有你的X特征:</p>
<pre><code>Age, Gender, Job, Classification
</code></pre>
<p>还有一个你想预测的数字特征:</p>
<pre><code>Wage
</code></pre>
<p>首先,您需要在输入变量和预测上拆分初始数据集,假设它的pandas数据帧如下所示:</p>
<p>输入变量(您的数据集有点不同,但整个代码保持不变,您将把数据集中的每一列放在X中,除了一列将转到Y.pd。get_dummies工作正常,没有问题-它将只转换分类变量,不会接触数字):</p>
<pre><code>X = jobs[['Age','Gender','Job','Classification']]
</code></pre>
<p>预测:</p>
<pre><code>Y = jobs['Wage']
</code></pre>
<p>将分类变量转换为伪/指示符变量,并在每个类别中删除一个:</p>
<pre><code>X = pd.get_dummies(data=X, drop_first=True)
</code></pre>
<p>所以现在如果你用<code>drop_first=True</code>检查X的形状(X.shape),你会发现它少了4列,每个分类变量少了一列。</p>
<p>现在可以继续在线性模型中使用它们。对于scikit learn实现,它可能如下所示:</p>
<pre><code>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() # Do not use fit_intercept = False if you have removed 1 column after dummy encoding
regr.fit(X_train, Y_train)
predicted = regr.predict(X_test)
</code></pre>