Имя автора: Джигар Шехат
Тема проекта: - Наука о данных и бизнес-аналитика
стажер в The Sparks Foundation
№ задачи 2:
Прогнозирование с использованием неконтролируемого машинного обучения
Ссылка на проект Скачать - Скачать сейчас
Http://github.com/Jigar710/Prediction_using_Unsupervised_ML
Здесь мы изучаем машинное обучение без учителя с использованием Python. Мы спрогнозируем оптимальное количество кластеров из набора данных радужной оболочки глаза и визуализируем его.
К-средние
Кластеризация K-средних - это алгоритм обучения без учителя, который используется для решения проблем кластеризации в машинном обучении или науке о данных.
Это алгоритм на основе центроида, где каждый кластер связан с центроидом. Основная цель этого алгоритма - минимизировать сумму расстояний между точкой данных и соответствующими кластерами.
Алгоритм принимает на вход немаркированный набор данных, делит набор данных на k-количество кластеров и повторяет процесс до тех пор, пока он не находит лучших кластеров. В этом алгоритме должно быть заранее определено значение k.
Алгоритм кластеризации k-средних в основном выполняет две задачи:
- Определяет наилучшее значение для K центральных точек или центроидов с помощью итеративного процесса.
- Присваивает каждой точке данных ближайший к ней k-центр. Те точки данных, которые находятся рядом с конкретным k-центром, создают кластер.
Подробнее о кластеризации K-средних
- Импорт всех необходимых библиотек
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
- длина лепестка и ширина лепестка кажутся положительно коррелированными (кажутся линейными).
- Ирис-сетоса, кажется, имеет меньшую длину и ширину лепестка по сравнению с другими.
- Глядя на общий сценарий, кажется, что ирис-Сетоса имеет меньшие размеры, чем другие цветы.