私は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個の変数があると言います要因のレベル。
さて、私はCity
とPerson
に基づいてBin
値を予測しようとすると、私はエラーを取得:
まず、私はテーブルとしてのために予測したいCity
とPerson
をフォーマットします。次に、これを入力として使用することを予測します。
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はどこから来るか私が見ることができません、または問題が発生する理由を示します。
ご協力いただければ幸いです!