Вопрос о подаче массива в K-Means.Fit - PullRequest
1 голос
/ 28 января 2020

Я на databricks; получение данных с SQL сервера БД . Данные поступают хорошо, я выбрал несколько числовых c полей из гораздо большего dataframe и бросил их в массив.

В этой строке:

model = kmeans.fit(dataset)

Я получаю эту ошибку:

raise ValueError("Params must be either a param map or a list/tuple of param maps, 

Вот мой код.

import tensorflow as tf
import numpy as np
from pyspark.ml.clustering import KMeans
from pyspark.ml.evaluation import ClusteringEvaluator
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.clustering import KMeans


df = spark.read \
    .jdbc("jdbc:sqlxx//sqlxx.database.windows.net:1433;databaseName=name_of_database", "dbo.name_of_table",
          properties={"user": "user", "password": "pwd"})


dataset = df.select('Rat', 'Cat', 'Coup', 'Mat', 'Pr', 'Sp', 'Co', 'Weight', 'DV')

dataset = dataset.fillna(0)

data_array =  np.array(dataset.select('Rat', 'Cat', 'Coup', 'Mat', 'Pr', 'Sp', 'Co', 'Weight', 'DV').collect())


# Loads data.
dataset = data_array

# Trains a k-means model.
kmeans = KMeans().setK(2).setSeed(1)
model = kmeans.fit(dataset)

# Make predictions
predictions = model.transform(dataset)

# Evaluate clustering by computing Silhouette score
evaluator = ClusteringEvaluator()

silhouette = evaluator.evaluate(predictions)
print("Silhouette with squared euclidean distance = " + str(silhouette))

# Shows the result.
centers = model.clusterCenters()
print("Cluster Centers: ")
for center in centers:
    print(center)

Когда я запустить нечто подобное в Spyder / Anaconda (только небольшие изменения для этой среды), все работает нормально. Должно быть что-то особенное, что нужно databricks, но я не уверен, что именно.

Пример кода взят из этой ссылки .

...