2016-07-12 9 views
2

私の用語を許して、私はMLプロではありません。私は以下の誤った用語を使用するかもしれません。scikit-learnで多変数線形回帰を実行するには?

私は多変数線形回帰を実行しようとしています。 Webサイトのページビューを分析してユーザーの性別を調べようとしているとします。

性別が、私が知っている、私はそれぞれの行は、Webサイトのセクションを表し機能行列を持っており、彼らはそれを訪問したかどうか、第2の要素、例えば、各ユーザの場合:

male1 = [ 
    [1, 1],  # visited section 1 
    [2, 0],  # didn't visit section 2 
    [3, 1],  # visited section 3, etc 
    [4, 0] 
] 

のでscikitで、私は建物xsおよびys。私は1として、男性を表す、と女性0

は、上記のように表現されるようにしています:

features = male1 
gender = 1 

、私は明らかにだけではなく、単一のユーザーのためのモデルのトレーニングではなく、よ私はトレーニングのために使用しているデータが何万人もいるユーザーがいます。

私は次のように私は私の xsysを作成する必要があります考えているだろう

from sklearn import linear_model 

clf = linear_model.LinearRegression() 
clf.fit(xs, ys) 

それは文句:

ValueError: Found array with dim 3. Estimator expected <= 2. 

どう

xs = [ 
    [   # user1 
     [1, 1],  
     [2, 0],  
     [3, 1],  
     [4, 0] 
    ], 
    [   # user2 
     [1, 0],  
     [2, 1],  
     [3, 1],  
     [4, 0] 
    ], 
    ... 
] 

ys = [1, 0, ...] 

scikitがこれを好きではありません私は線形回帰アルゴリズムに特徴行列をscikit-learn?

答えて

3

xsを別の方法で作成する必要があります。 docsによれば:

fit(X, y, sample_weight=None) 

パラメータ:

X : numpy array or sparse matrix of shape [n_samples, n_features] 
     Training data 
    y : numpy array of shape [n_samples, n_targets] 
     Target values 
    sample_weight : numpy array of shape [n_samples] 
     Individual weights for each sample 

したがってxsは、ウェブサイトのセクションとしてユーザーと同じ数の列と同じ数の行の2次元配列でなければなりません。あなたはxsを3D配列として定義しました。 1によって次元の数を減らすためにあなたがリストの内包を通じてセクション番号を取り除くことができます:

xs = [[1, 0, 1, 0], # user1 
     [0, 1, 1, 0], # user2 
     ... 
     ] 

xs = [[visit for section, visit in user] for user in xs] 

そう、あなたは一例として提供されたデータは、に変換されますない場合

およびclf.fit(xs, ys)は期待どおりに動作するはずです。次元削減に

より効率的なアプローチは、numpyのアレイをスライスすることであろう。

import numpy as np 
xs = np.asarray(xs)[:,:,1] 
関連する問題