2016-08-05 14 views
0

私はMicrosoftの "Data Science End to End Walkthrough"を使用して自分自身をR Serverに設定しており、その例は完全に機能しています。RevoScaleR:rxPredict、パラメータの数が変数の数と一致しません

例(ニューヨークタクシーデータ)は、カテゴリー変数(チップが支払われたかどうかについて1か0)を予測するために非カテゴリ変数(距離、タクシーなど)を使用します。

私は、カテゴリ変数を入力として線形回帰(rxLinMod関数)を使用して同様のバイナリ出力を予測しようとしていますが、エラーが発生しています。

エラーは、パラメータの数が変数の数と一致しないと言いますが、number of variablesは実際には各要因(変数)内のレベルの数です。テーブルを作成します

を複製する

は、SQL Serverで例と呼ばれる:

USE [my_database]; 
SET ANSI_NULLS ON; 
SET QUOTED_IDENTIFIER ON; 
CREATE TABLE [dbo].[example](
    [Person] [nvarchar](max) NULL, 
    [City] [nvarchar](max) NULL, 
    [Bin] [integer] NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]; 
それで

入れデータ:

insert into [dbo].[example] values ('John','London',0); 
insert into [dbo].[example] values ('Paul','New York',0); 
insert into [dbo].[example] values ('George','Liverpool',1); 
insert into [dbo].[example] values ('Ringo','Paris',1); 
insert into [dbo].[example] values ('John','Sydney',1); 
insert into [dbo].[example] values ('Paul','Mexico City',1); 
insert into [dbo].[example] values ('George','London',1); 
insert into [dbo].[example] values ('Ringo','New York',1); 
insert into [dbo].[example] values ('John','Liverpool',1); 
insert into [dbo].[example] values ('Paul','Paris',0); 
insert into [dbo].[example] values ('George','Sydney',0); 
insert into [dbo].[example] values ('Ringo','Mexico City',0); 

私もで変数を返すSQL関数を使用しますこれは、Microsoftの例では必要なものです。 - Person、およびCity

USE [my_database]; 
SET ANSI_NULLS ON; 
SET QUOTED_IDENTIFIER ON; 
CREATE FUNCTION [dbo].[formatAsTable] (
@City nvarchar(max)='', 
@Person nvarchar(max)='') 
RETURNS TABLE 
AS 
    RETURN 
    (
    -- Add the SELECT statement with parameter references here 
    SELECT 
    @City AS City, 
    @Person AS Person 
); 

我々は今、2つのカテゴリ変数を持つテーブルがある:機能formatAsTableを作成します。

予測を開始しましょう。 Rでは、以下を実行します。

library(RevoScaleR) 
# Set up the database connection 
connStr <- "Driver=SQL Server;Server=<servername>;Database=<dbname>;Uid=<uid>;Pwd=<password>" 
sqlShareDir <- paste("C:\\AllShare\\",Sys.getenv("USERNAME"),sep="") 
sqlWait <- TRUE 
sqlConsoleOutput <- FALSE 
cc <- RxInSqlServer(connectionString = connStr, shareDir = sqlShareDir, 
        wait = sqlWait, consoleOutput = sqlConsoleOutput) 
rxSetComputeContext(cc) 
# Set the SQL which gets our data base 
sampleDataQuery <- "SELECT * from [dbo].[example] " 
# Set up the data source 
inDataSource <- RxSqlServerData(sqlQuery = sampleDataQuery, connectionString = connStr, 
           colClasses = c(City = "factor",Bin="logical",Person="factor" 
           ), 
           rowsPerRead=500)  

ここで、線形回帰モデルを設定します。モデルオブジェクトで

isWonObj <- rxLinMod(Bin ~ City+Person,data = inDataSource) 

ルック:それはこのようになります

isWonObj 

は予告:

... 
Total independent variables: 11 (Including number dropped: 3) 
... 

Coefficients: 
          Bin 
(Intercept)  6.666667e-01 
City=London  -1.666667e-01 
City=New York  4.450074e-16 
City=Liverpool 3.333333e-01 
City=Paris  4.720871e-16 
City=Sydney  -1.666667e-01 
City=Mexico City  Dropped 
Person=John  -1.489756e-16 
Person=Paul  -3.333333e-01 
Person=George   Dropped 
Person=Ringo   Dropped 

これはの和であるように、それは、罰金である、11個の変数があると言います要因のレベル。

さて、私はCityPersonに基づいてBin値を予測しようとすると、私はエラーを取得:

まず、私はテーブルとしてのために予測したいCityPersonをフォーマットします。次に、これを入力として使用することを予測します。

sq<-"SELECT City, Person FROM [dbo].[formatAsTable]('London','George')" 
pred<-RxSqlServerData(sqlQuery = sq,connectionString = connStr 
         , colClasses = c(City = "factor",Person="factor")) 

あなたがpredオブジェクトをチェックすると、予想通り、それが見えます:私は予測しようとすると、

> head(pred) 
    City Person 
1 London George 

は今、私はエラーを取得します。

scoredOutput <- RxSqlServerData(
    connectionString = connStr, 
    table = "binaryOutput" 
) 

rxPredict(modelObject = isWonObj, data = pred, outData = scoredOutput, 
      predVarNames = "Score", type = "response", writeModelVars = FALSE, overwrite = TRUE,checkFactorLevels = FALSE) 

エラーは言う:

INTERNAL ERROR: In rxPredict, the number of parameters does not match the number of variables: 3 vs. 11. 

11がどこから来るか私が見ることができますが、私は唯一の予測クエリに2つの値を供給している - その3はどこから来るか私が見ることができません、または問題が発生する理由を示します。

ご協力いただければ幸いです!

答えて

関連する問題