다음을 통해 공유


kmeans_fl()

함수 kmeans_fl()k-평균 알고리즘을 사용하여 데이터 세트를 클러스터화하는 UDF(사용자 정의 함수)입니다.

사전 요구 사항

  • 클러스터에서 Python 플러그 인 을 사용하도록 설정해야 합니다. 함수에 사용되는 인라인 Python에 필요합니다.
  • 데이터베이스에서 Python 플러그 인 을 사용하도록 설정해야 합니다. 함수에 사용되는 인라인 Python에 필요합니다.

Syntax

T | invoke kmeans_fl(k (2),, features_colscluster_col)

구문 규칙에 대해 자세히 알아보세요.

매개 변수

이름 형식 필수 Description
k int ✔️ 클러스터 수입니다.
features_cols dynamic ✔️ 클러스터링 사용할 기능 열의 이름을 포함하는 배열입니다.
cluster_col string ✔️ 각 레코드의 출력 클러스터 ID를 저장할 열의 이름입니다.

함수 정의

다음과 같이 해당 코드를 쿼리 정의 함수로 포함하거나 데이터베이스에 저장된 함수로 만들어 함수를 정의할 수 있습니다.

다음 let 문을 사용하여 함수를 정의합니다. 사용 권한이 필요 없습니다.

중요

let 문은 자체적으로 실행할 수 없습니다. 그 뒤에 테이블 형식 식 문이 있어야 합니다. 의 kmeans_fl()작업 예제를 실행하려면 예제를 참조하세요.

let kmeans_fl=(tbl:(*), k:int, features:dynamic, cluster_col:string)
{
    let kwargs = bag_pack('k', k, 'features', features, 'cluster_col', cluster_col);
    let code = ```if 1:

        from sklearn.cluster import KMeans

        k = kargs["k"]
        features = kargs["features"]
        cluster_col = kargs["cluster_col"]

        km = KMeans(n_clusters=k)
        df1 = df[features]
        km.fit(df1)
        result = df
        result[cluster_col] = km.labels_
    ```;
    tbl
    | evaluate python(typeof(*), code, kwargs)
};
// Write your query to use the function here.

예제

다음 예제에서는 invoke 연산자를 사용하여 함수를 실행합니다.

센서 측정값에서 공간 점유 클러스터화

쿼리 정의 함수를 사용하려면 포함된 함수 정의 다음에 호출합니다.

let kmeans_fl=(tbl:(*), k:int, features:dynamic, cluster_col:string)
{
    let kwargs = bag_pack('k', k, 'features', features, 'cluster_col', cluster_col);
    let code = ```if 1:

        from sklearn.cluster import KMeans

        k = kargs["k"]
        features = kargs["features"]
        cluster_col = kargs["cluster_col"]

        km = KMeans(n_clusters=k)
        df1 = df[features]
        km.fit(df1)
        result = df
        result[cluster_col] = km.labels_
    ```;
    tbl
    | evaluate python(typeof(*), code, kwargs)
};
//
// Clusterize room occupancy from sensors measurements.
//
// Occupancy Detection is an open dataset from UCI Repository at https://archive.ics.uci.edu/ml/datasets/Occupancy+Detection+
// It contains experimental data for binary classification of room occupancy from Temperature, Humidity, Light, and CO2.
//
OccupancyDetection
| extend cluster_id=int(null)
| invoke kmeans_fl(5, pack_array("Temperature", "Humidity", "Light", "CO2", "HumidityRatio"), "cluster_id")
| sample 10

출력

타임스탬프 온도 습도 밝음 이산화탄소 HumidityRatio 테스트 cluster_id
2015-02-02 14:38:00.0000000 23.64 27.1 473 908.8 0.00489763 TRUE TRUE 1
2015-02-03 01:47:00.0000000 20.575 22.125 0 446 0.00330878 FALSE TRUE 0
2015-02-10 08:47:00.0000000 20.42666667 33.56 405 494.3333333 0.004986493 TRUE FALSE 4
2015-02-10 09:15:00.0000000 20.85666667 35.09666667 433 665.3333333 0.005358055 TRUE FALSE 4
2015-02-11 16:13:00.0000000 21.89 30.0225 429 771.75 0.004879358 TRUE TRUE 4
2015-02-13 14:06:00.0000000 23.4175 26.5225 608 599.75 0.004728116 TRUE TRUE 4
2015-02-13 23:09:00.0000000 20.13333333 32.2 0 502.6666667 0.004696278 FALSE TRUE 0
2015-02-15 18:30:00.0000000 20.5 32.79 0 666.5 0.004893459 FALSE TRUE 3
2015-02-17 13:43:00.0000000 21.7 33.9 454 1167 0.005450924 TRUE TRUE 1
2015-02-17 18:17:00.0000000 22.025 34.2225 0 1538.25 0.005614538 FALSE TRUE 2

각 클러스터의 중심 및 크기 추출

쿼리 정의 함수를 사용하려면 포함된 함수 정의 다음에 호출합니다.

let kmeans_fl=(tbl:(*), k:int, features:dynamic, cluster_col:string)
{
    let kwargs = bag_pack('k', k, 'features', features, 'cluster_col', cluster_col);
    let code = ```if 1:

        from sklearn.cluster import KMeans

        k = kargs["k"]
        features = kargs["features"]
        cluster_col = kargs["cluster_col"]

        km = KMeans(n_clusters=k)
        df1 = df[features]
        km.fit(df1)
        result = df
        result[cluster_col] = km.labels_
    ```;
    tbl
    | evaluate python(typeof(*), code, kwargs)
};
OccupancyDetection
| extend cluster_id=int(null)
| invoke kmeans_fl(5, pack_array("Temperature", "Humidity", "Light", "CO2", "HumidityRatio"), "cluster_id")
| summarize Temperature=avg(Temperature), Humidity=avg(Humidity), Light=avg(Light), CO2=avg(CO2), HumidityRatio=avg(HumidityRatio), num=count() by cluster_id
| order by num

출력

cluster_id 온도 습도 밝음 이산화탄소 HumidityRatio num
0 20.3507186863278 27.1521395395781 10.1995789883291 486.804272186974 0.00400132147662714 11124
4 20.9247315268427 28.7971160082823 20.7311894656536 748.965771574469 0.00440412568299058 3063
1 22.0284137970445 27.8953334469889 481.872136037748 1020.70779349773 0.00456692559904535 2514
3 22.0344177115763 25.1151053429273 462.358969056434 656.310608696507 0.00411782436443015 2176
2 21.4091216082295 31.8363099552939 174.614816229606 1482.05062388414 0.00504573022875817 1683

이 기능은 지원되지 않습니다.