0

AC次のような構造の SQL Server に データ テーブルがあります。

+----------+------------+-------+
| AuthorID | CoAuthorID | Year  |
+----------+------------+-------+
|  677     | 901706     |  2005 |
|  677     | 901706     |  2005 |
|  677     | 901706     |  2005 |
|  1359    | 133112     |  2005 |
|  1359    | 133112     |  2005 |
|  1359    | 133112     |  2005 |
|  1359    | 266386     |  2005 |
|  1359    | 454557     |  2005 |
|  1359    | 454557     |  2005 |
|  1359    | 454557     |  2005 |
|  1359    | 534423     |  2005 |
|  1359    | 534423     |  2005 |
|  1359    | 534423     |  2005 |
|  1359    | 578338     |  2005 |
|  1359    | 721615     |  2005 |
|  1359    | 1016805    |  2005 |
|  1359    | 1016805    |  2005 |
|  1359    | 1016805    |  2005 |
|  1359    | 1361047    |  2005 |
|  1359    | 1361047    |  2005 |
|  1359    | 1361047    |  2005 |
|  1359    | 1361320    |  2005 |
|  1359    | 1361320    |  2005 |
|  1359    | 1361320    |  2005 |
|  1359    | 1395982    |  2005 |
|  1359    | 1395982    |  2005 |
|  1359    | 1395982    |  2005 |
|  1359    | 1412785    |  2005 |
|  1359    | 1412785    |  2005 |
|  1359    | 1412785    |  2005 |
|  1359    | 1412785    |  2005 |
|  ...     |            |       |
|  ...     |            |       |
+----------+------------+-------+

与えられた年次を計算する必要がありConditional ProbabilityますAuthorIDCoAuthorID

P(AuthorID|CoAuthorID)=P(AuthorID ∩ CoAuthorID) / P(CoAuthorID)

2005交差点操作である 年に。

最初に、たとえばAuthorID = 677and CoAuthorID = 901706and Year = 2005、私はこれを試しました:

の場合P(AuthorID):

SELECT COUNT(DISTINCT AuthorID) FROM AC WHERE Year = 2005  

390そう返すP(AuthorID)=1/390

の場合P(CoAuthorID):

SELECT COUNT(DISTINCT CoAuthorID) FROM AC WHERE AuthorID = 677 AND Year = 2005

1そう返すP(CoAuthorID)=1/1

の場合P(AuthorID ∩ CoAuthorID):

SELECT * FROM AC WHERE AuthorID = 677 AND Year = 2005
INTERSECT 
SELECT * FROM AC WHERE CoAuthorID = 901706 AND Year = 2005

次のように 1 行を返します。

AuthorID    CoAuthorID  Year
----------------------------
677         901706      2005

データに 3 行あるのに対し、データに 3 回共存するということはAuthorID、この 2 人の著者が 2005 年に 3 回一緒に貢献したことを意味します。 CoAuthorID2005

  1. の値はP(AuthorID ∩ CoAuthorID)何ですか? 1それとも1/3?_
  2. また、他の計算は正しいですか?

ありがとう!

4

2 に答える 2

2

この式はある程度正しいです。

P(AuthorID|CoAuthorID) = P(AuthorID ∩ CoAuthorID) / P(CoAuthorID) 

より正確にするには、年の制約も指定する必要がありますが、

P(AuthorID|CoAuthorID ∩ Year) = P(AuthorID ∩ CoAuthorID|Year)/P(CoAuthorID|Year)

P(AuthorID)(または実際には)の計算を行いますP(AuthorID|Year)が、その項は上記の式には含まれていないため、役に立ちません。

第二に、使用しないでくださいDISTINCT。同じ著者の出現が多数ある場合、その著者の可能性は、あまり頻繁に出現しない別の著者の可能性よりも高いと見なされます。を使用DISTINCTすることで、これらの異なる頻度を無視し、各著者に同じ確率を帰することができます。これは意図することはできません。

代わりに、これらの確率を次のように識別できます。

P(CoAuthorID|Year)

この SQL を使用して、その確率 (0 から 1 の間) を取得します。

SELECT SUM(CASE 
              WHEN CoAuthorID = 901706 THEN 1 
           END)       AS matching_records,
       COUNT(*)       AS considered_records,
       CAST(SUM(CASE 
              WHEN CoAuthorID = 901706 THEN 1 
           END) AS FLOAT)
           / COUNT(*) AS probability  
FROM   AC 
WHERE  Year = 2005

これは実際には 3 つの値を返しますが、必要なのは 3 つ目だけです。ただし、最初の 2 つの値も含めると、結果を分析するのに役立ちます。

最初の値は、2005 年に特定の CoAuthorID が出現するたびにカウントし ("matching_records")、2 番目の値は 2005 年のレコードの総数をカウントし("considered_records")、3 番目は最初の値を 2 番目の値で割って確率を求めます。

極端な場合、2005 年のすべてのレコードがこの CoAuthorID を持つ可能性があり、確率は 1 を返します。

P(AuthorID ∩ CoAuthorID|Year)

同様に、この確率を得るために次のことができます。

SELECT SUM(CASE 
              WHEN AuthorID = 677 AND CoAuthorID = 901706 THEN 1 
           END)       AS matching_records,
       COUNT(*)       AS considered_records,
       CAST(SUM(CASE 
              WHEN AuthorID = 677 AND CoAuthorID = 901706 THEN 1 
           END) AS FLOAT)
       / COUNT(*)     AS probability  
FROM   AC 
WHERE  Year = 2005

出現しているパターンに注意してください。一般に、制約 Y は句でP(X|Y)発生し、WHEREX は句で表されCASE WHENます。

P(AuthorID|CoAuthorID ∩ Year)

前の 2 つのクエリの結果を使用することもできますが、より直接的な方法で次のパターンを使用することもできますP(AuthorID|CoAuthorID ∩ Year)

SELECT SUM(CASE 
              WHEN AuthorID = 677 THEN 1 
           END)       AS matching_records,
       COUNT(*)       AS considered_records,
       CAST(SUM(CASE 
              WHEN AuthorID = 677 THEN 1 
           END) AS FLOAT)
       / COUNT(*)     AS probability  
FROM   AC 
WHERE  Year = 2005
AND    CoAuthorID = 901706 

最初の質問への回答

の値はP(AuthorID ∩ CoAuthorID)何ですか? 1それとも1/3?_

AuthorId、CoAuthorID、および Year が一致するデータに 3 つの行があるため、P(AuthorID ∩ CoAuthorID|Year)3/num_recordsnum_recordsが 2005 である番号またはレコードです。

INTERSECT結果の重複を排除するという副作用があることに注意してください。上で書いDISTINCTたことはここにも当てはまります。確率を扱うときは、重複をカウントする必要があります。

補遺: 結果の例

このデータを考えると:

+----------+------------+-------+
| AuthorID | CoAuthorID | Year  |
+----------+------------+-------+
|  677     | 901706     |  2005 |
|  677     | 901706     |  2005 |
|  677     | 901706     |  2005 |
|  1359    | 133112     |  2005 |
|  1359    | 133112     |  2005 |
|  1359    | 133112     |  2005 |
|  1359    | 266386     |  2005 |
|  1359    | 454557     |  2005 |
|  1359    | 454557     |  2005 |
|  1359    | 454557     |  2005 |
|  1359    | 534423     |  2005 |
|  1359    | 534423     |  2005 |
|  1359    | 534423     |  2005 |
|  1359    | 578338     |  2005 |
|  1359    | 721615     |  2005 |
|  1359    | 1016805    |  2005 |
|  1359    | 1016805    |  2005 |
|  1359    | 1016805    |  2005 |
|  1359    | 1361047    |  2005 |
|  1359    | 1361047    |  2005 |
|  1359    | 1361047    |  2005 |
|  1359    | 1361320    |  2005 |
|  1359    | 1361320    |  2005 |
|  1359    | 1361320    |  2005 |
|  1359    | 1395982    |  2005 |
|  1359    | 1395982    |  2005 |
|  1359    | 1395982    |  2005 |
|  1359    | 1412785    |  2005 |
|  1359    | 1412785    |  2005 |
|  1359    | 1412785    |  2005 |
|  1359    | 1412785    |  2005 |
+----------+------------+-------+

次の確率を見ることができます。

1.P(AuthorID=1359 | CoAuthorID=1361047 ∩ Year=2005)

意味: それが与えられたとき確率は?AuthorID=1359CoAuthor=1361047Year=2005

非公式に: 2005 年に、共著者 1361047 と著者 1359 との共同研究の割合は?

考慮されたコラボレーションの数: 3 (この共著者は 2005 年に 3 回しかコラボレーションしなかったため)

一致するコラボレーションの数: 3、この共著者は 2005 年にこの著者と 3 回コラボレーションしたため (つまり、他の誰ともコラボレーションしていない)

確率: 3/3 = 1。

2.P(AuthorID=1359 ∩ CoAuthorID=1361047 | Year=2005)

意味:との間 コラボレーションが存在する確率は?AuthorID=1359CoAuthor=1361047Year=2005

非公式に: 2005 年に、著者 1359 と共著者 1361047 の間のコラボレーションの割合は?

考慮されたコラボレーションの数: 31 (2005 年に 31 のコラボレーションがあったため)

一致するコラボレーションの数: 3 (この著者と共著者は 2005 年に 3 回コラボレーションしたため)

確率: 3/31。

3.P(CoAuthorID=1361047 | AuthorID=1359 ∩ Year=2005)

意味: それが与えられたとき確率は?CoAuthor=1361047AuthorID=1359Year=2005

非公式に: 2005 年に、著者 1359 の共著者 1361047 とのコラボレーションの割合は?

考慮されたコラボレーションの数: 28 (この著者は 2005 年に 28 回 (誰とでも) コラボレーションしたため)

一致するコラボレーションの数: 3 (この著者はこの共著者と 2005 年に 3 回共著したため)

確率: 3/28。

観察

上記の 3 つの述語が似ているように聞こえますが、実際にはどのように異なるかに注意してください。正確な言葉遣いが重要です。たとえば、次のフレーズを考えてみましょう。

著者 A と共著者 B が 2005 年に一緒にいる確率

これを共著者 B の視点から見ると 100% です。なぜなら、この人物は他の誰とも共著していないからです (上記のケース 1)。しかし、著者 A の視点からこれを見るのは異なります。なぜなら、その人は他の多くの共著者とも協力していたからです (上記のケース 3)。そのため、確率は小さくなります。しかし、それは誰の視点からも解釈することができます。2005 年のすべてのコラボレーションを調べて、著者 A と共著者 B の間で何回行われたかを確認できます (ケース 2)。これもまた別の確率です。

これは、ステートメントがあいまいになりやすいことを示しており、正確には注意が必要です。P(X|Y)これは、表記のパイプ記号の後に表示する必要があります。

于 2016-03-05T10:13:13.540 に答える
0

EXCEPT は、右側の入力クエリによって出力されない、左側の入力クエリからの個別の行を返します。

INTERSECT は、左と右の両方の入力クエリによって出力される個別の行を返します。

DISTINCT、カール。

https://msdn.microsoft.com/en-us/library/ms188055(v=sql.120).aspx

于 2016-03-05T09:38:25.103 に答える