Ken*_*awa 0 python linear-regression scikit-learn dummy-variable
我将使用逻辑回归来预测电影的票房.我得到了一些火车数据,包括演员和导演.这是我的数据:
Director1|Actor1|300 million
Director2|Actor2|500 million
Run Code Online (Sandbox Code Playgroud)
我将使用整数对导演和演员进行编码.
1|1|300 million
2|2|300 million
Run Code Online (Sandbox Code Playgroud)
这意味着X={[1,1],[2,2]} y=[300,500]和fit(X,y)
运作的?
你不能在线性回归中使用分类变量.线性回归将所有变量视为数值变量.因此,如果将Director1编码为1,将Director2编码为2,则线性回归将尝试根据该编码方案查找关系.假设Director2的大小是Director1的两倍.实际上,这些数字并不意味着什么.您可以将它们编码为143和9879,应该没有任何区别.它们没有任何数字含义.为了确保线性回归正确处理它们,您需要使用虚拟变量.
使用虚拟变量,每个类别级别都有一个变量.例如,如果您有3个导演,则将有3个变量:D1,D2和D3.如果相应的电影由Director1指示,则D1的值为1,否则为0; 如果电影是由Director2指示的,D2将具有值1,否则为0 ...因此,对于一组值D2 D1 D2 D3 D1 D2,您的虚拟变量将为:
D1 D2 D3
D2 0 1 0
D1 1 0 0
D2 0 1 0
D3 0 0 1
D1 1 0 0
D2 0 1 0
Run Code Online (Sandbox Code Playgroud)
在线性回归中,为了避免多重共线性,我们仅使用n-1这些变量,其中n是类别数(本例中的导向数).其中一名董事将被选为基础,并将由回归模型中的常数表示.哪一个没关系.例如,如果您排除D3,您将知道该电影是由Director3指示的,如果D1=0和D2=0.您无需指定D3=1.
在scikit-learn中,这种转换是通过OneHotEncoder完成的.这个例子来自scikit-learn 文档:
您有三个分类变量:性别,区域和浏览器.性别有两个级别:["male", "female"],区域有三个级别:["from Europe", "from US", "from Asia"]浏览器有四个级别:["uses Firefox", "uses Chrome", "uses Safari", "uses Internet Explorer"].假设它们使用从零开始的数字编码.所以[0, 1, 2]意味着使用Safari的美国男性.
>>> enc = preprocessing.OneHotEncoder()
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
OneHotEncoder(categorical_features='all', dtype=<... 'float'>,
handle_unknown='error', n_values='auto', sparse=True)
>>> enc.transform([[0, 1, 3]]).toarray()
array([[ 1., 0., 0., 1., 0., 0., 0., 0., 1.]])
Run Code Online (Sandbox Code Playgroud)
使用enc.fitscikit-learn可以推断出每个变量的级别数.对于像[0,1,3]这样的观察,如果你打电话,enc.transform你会看到他们的虚拟变量.请注意,结果数组的长度为2 + 3 + 4 = 9.性别的前两个(如果是男性,第一个是1),接下来的三个是区域,依此类推.
| 归档时间: |
|
| 查看次数: |
569 次 |
| 最近记录: |