Имя автора: Джигар Шехат

Тема проекта: - Наука о данных и бизнес-аналитика

стажер в The Sparks Foundation

№ задачи 2:

Прогнозирование с использованием неконтролируемого машинного обучения

Ссылка на проект Скачать - Скачать сейчас

Http://github.com/Jigar710/Prediction_using_Unsupervised_ML

Здесь мы изучаем машинное обучение без учителя с использованием Python. Мы спрогнозируем оптимальное количество кластеров из набора данных радужной оболочки глаза и визуализируем его.

К-средние

Кластеризация K-средних - это алгоритм обучения без учителя, который используется для решения проблем кластеризации в машинном обучении или науке о данных.

Это итерационный алгоритм, который делит немаркированный набор данных на k различных кластеров таким образом, что каждый набор данных принадлежит только одной группе, имеющей аналогичные свойства.

Это алгоритм на основе центроида, где каждый кластер связан с центроидом. Основная цель этого алгоритма - минимизировать сумму расстояний между точкой данных и соответствующими кластерами.
Алгоритм принимает на вход немаркированный набор данных, делит набор данных на k-количество кластеров и повторяет процесс до тех пор, пока он не находит лучших кластеров. В этом алгоритме должно быть заранее определено значение k.
Алгоритм кластеризации k-средних в основном выполняет две задачи:

  • Определяет наилучшее значение для K центральных точек или центроидов с помощью итеративного процесса.
  • Присваивает каждой точке данных ближайший к ней k-центр. Те точки данных, которые находятся рядом с конкретным k-центром, создают кластер.

Подробнее о кластеризации K-средних

  1. Импорт всех необходимых библиотек
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

2. Загрузка набора данных радужной оболочки

#from sklearn import datasets
#iris = datasets.load_iris()
#iris_df = pd.DataFrame(iris.data, columns = iris.feature_names)
iris_df = pd.read_csv("iris.csv")
print(iris_df.head()) # See the first 5 rows

3. Поиск оптимального количества кластеров

x = iris_df.iloc[:, [0, 1, 2, 3]].values


from sklearn.cluster import KMeans
wcss = []


for i in range(1, 11):
    kmeans = KMeans(n_clusters = i, init = 'k-means++', 
                    max_iter = 300, n_init = 10, random_state = 0)
    kmeans.fit(x)
    wcss.append(kmeans.inertia_)
    
# Plotting the results onto a line graph, 
# `allowing us to observe 'The elbow'
plt.plot(range(1, 11), wcss)
plt.title('The elbow method')
plt.xlabel('Number of clusters')
plt.ylabel('WCSS') # Within cluster sum of squares
plt.show()

4. Применение k средних к набору данных

#Applying k means to the dataset / Creating the k means classifier
kmeans = KMeans(n_clusters = 3, init = 'k-means++',
                max_iter = 300, n_init = 10, random_state = 0)
y_kmeans = kmeans.fit_predict(x)

5. Построение кластеров

#Visualising the clusters
plt.scatter(x[y_kmeans == 0, 0], x[y_kmeans == 0, 1], s = 100, c = 'purple', label = 'Iris-setosa')
plt.scatter(x[y_kmeans == 1, 0], x[y_kmeans == 1, 1], s = 100, c = 'orange', label = 'Iris-versicolour')
plt.scatter(x[y_kmeans == 2, 0], x[y_kmeans == 2, 1], s = 100, c = 'green', label = 'Iris-virginica')

#Plotting the centroids of the clusters
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:,1], s = 100, c = 'red', label = 'Centroids')

plt.legend()

6. Трехмерная диаграмма рассеяния с использованием matplotlib

fig = plt.figure(figsize = (15,15))
ax = fig.add_subplot(111, projection='3d')
plt.scatter(x[y_kmeans == 0, 0], x[y_kmeans == 0, 1], s = 50, c = 'purple', label = 'Iris-setosa')
plt.scatter(x[y_kmeans == 1, 0], x[y_kmeans == 1, 1], s = 50, c = 'orange', label = 'Iris-versicolour')
plt.scatter(x[y_kmeans == 2, 0], x[y_kmeans == 2, 1], s = 50, c = 'green', label = 'Iris-virginica')

#Plotting the centroids of the clusters
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:,1], s = 50, c = 'red', label = 'Centroids')
plt.show()

7. Обозначение прогнозов

#considering 0 Corresponds to 'Iris-setosa'
#1 to 'Iris-versicolour'
#2 to 'Iris-virginica'
y_kmeans = np.where(y_kmeans==0, 'Iris-setosa', y_kmeans)
y_kmeans = np.where(y_kmeans=='1', 'Iris-versicolour', y_kmeans)
y_kmeans = np.where(y_kmeans=='2', 'Iris-virginica', y_kmeans)

8. Добавление прогноза в набор данных

data_with_clusters = iris_df.copy()
data_with_clusters["Cluster"] = y_kmeans
print(data_with_clusters.head(5))

9. Гистограмма - распределение кластеров

# Bar plot
sns.set_style('darkgrid')
sns.barplot(x = data_with_clusters["Cluster"] .unique(),
            y = data_with_clusters["Cluster"] .value_counts(),
            palette=sns.color_palette(["#e74c3c", "#34495e", "#2ecc71"]));

10. Парный участок

### hue = species colours plot as per species
### It will give 3 colours in the plot

sns.set_style('whitegrid')   ### Sets grid style
sns.pairplot(data_with_clusters,hue = 'Cluster');

11. Статистика PairPlot

  1. длина лепестка и ширина лепестка кажутся положительно коррелированными (кажутся линейными).
  2. Ирис-сетоса, кажется, имеет меньшую длину и ширину лепестка по сравнению с другими.
  3. Глядя на общий сценарий, кажется, что ирис-Сетоса имеет меньшие размеры, чем другие цветы.

Большое спасибо !!!