Рак молочной железы является наиболее распространенным видом рака среди женщин и вторым наиболее распространенным видом рака в целом. Раннее выявление и точное прогнозирование рака молочной железы могут улучшить результаты лечения и спасти жизни. В последние годы машинное обучение стало перспективным подходом к прогнозированию рака молочной железы. Однако достижение высокой эффективности прогнозирования рака молочной железы с помощью машинного обучения может быть затруднено из-за сложности данных и необходимости тщательного выбора и настройки соответствующих алгоритмов и параметров. В этой статье мы обсудим три ключевых метода повышения эффективности прогнозирования рака молочной железы с помощью машинного обучения: настройка гиперпараметров, анализ основных компонентов (PCA) и ансамблевое обучение.
Одной из ключевых проблем при использовании машинного обучения для прогнозирования рака молочной железы является выбор правильного алгоритма и установка его гиперпараметров, которые не извлекаются из обучающих данных, а устанавливаются до обучения. Настройка гиперпараметров включает поиск оптимальных значений этих гиперпараметров, чтобы максимизировать производительность модели машинного обучения. Существует несколько подходов к настройке гиперпараметров, включая ручную настройку, поиск по сетке и случайный поиск.
Ручная настройка включает в себя ручной выбор и настройку гиперпараметров на основе экспертных знаний и опыта. Это может занять много времени и не всегда может привести к оптимальным значениям.
Поиск по сетке включает указание сетки значений гиперпараметров и оценку модели для каждой комбинации значений. Это может быть дорогостоящим в вычислительном отношении, так как требует многократного обучения и оценки модели.
Случайный поиск включает выборку случайных комбинаций значений гиперпараметров и оценку модели для каждой комбинации. Это может быть более эффективно, чем поиск по сетке, поскольку не требует оценки модели для каждой комбинации значений.
Еще один метод повышения эффективности прогнозирования рака молочной железы — использование PCA для уменьшения размерности данных. Данные о раке молочной железы часто могут иметь большое количество признаков, что усложняет обучение модели машинного обучения и может привести к переоснащению. PCA — это статистический метод, который можно использовать для уменьшения размерности данных путем проецирования данных в пространство с меньшим размером. Это может помочь повысить производительность модели машинного обучения за счет снижения сложности данных и снижения риска переобучения.
Давайте теперь реализуем наше приложение на python.
Введение
Описание набора данных Набор данных по раку молочной железы в штате Висконсин (диагностический), полученный от Kaggle, содержит характеристики, вычисленные на основе оцифрованного изображения аспирата тонкой иглой (FNA) массы молочной железы, и описывает характеристики ядер клеток, присутствующих в Изображение.
Количество экземпляров: 569
Количество атрибутов: 32 (идентификатор, диагноз, 30 входных признаков с реальными значениями)
Информация об атрибутах
- идентификационный номер
- Диагноз (M = злокачественный, B = доброкачественный)
- Для каждого клеточного ядра вычисляются десять вещественных признаков:
- радиус (среднее расстояние от центра до точек на периметре)
- текстура (стандартное отклонение значений шкалы серого)
- периметр
- область
- гладкость (локальное изменение длины радиуса)
- компактность (периметр²/площадь — 1,0)
- вогнутость (выраженность вогнутых участков контура)
- вогнутые точки (количество вогнутых частей контура)
- симметрия
- фрактальная размерность («приближение береговой линии» — 1)
Среднее значение, стандартная ошибка и «наихудшее» или наибольшее (среднее значение трех самых больших значений) этих признаков были вычислены для каждого изображения, в результате чего было получено 30 признаков. Например, поле 3 — это средний радиус, поле 13 — юго-восточный радиус, поле 23 — наихудший радиус.
import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt %matplotlib inline from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from sklearn.model_selection import GridSearchCV pd.set_option('display.max_columns', None) pd.set_option('display.width', 500) import warnings warnings.filterwarnings('ignore')
Загрузите данные
Мы начинаем с загрузки данных о раке молочной железы в фрейм данных Pandas и проверки его столбцов и значений. Мы можем использовать функцию read_csv() из Pandas для загрузки данных в фрейм данных и метод head() для отображения первых нескольких строк данных:
# Load the data data = pd.read_csv('/kaggle/input/breast-cancer-wisconsin-data/data.csv') data.head()
Сводные статистические данные
Чтобы получить сводку числовых столбцов в данных, вы можете использовать функцию some.
def check_df(dataframe, head=5): print("##################### Shape #####################") print(dataframe.shape) print("##################### Types #####################") print(dataframe.dtypes) print("##################### Head #####################") print(dataframe.head(head)) print("##################### Tail #####################") print(dataframe.tail(head)) print("##################### NA #####################") print(dataframe.isnull().sum()) print("##################### Quantiles #####################") print(dataframe.quantile([0, 0.05, 0.50, 0.95, 0.99, 1]).T) check_df(data) ##################### Shape ##################### (569, 33) ##################### Types ##################### id int64 diagnosis object radius_mean float64 texture_mean float64 perimeter_mean float64 area_mean float64 smoothness_mean float64 compactness_mean float64 concavity_mean float64 concave points_mean float64 symmetry_mean float64 fractal_dimension_mean float64 radius_se float64 texture_se float64 perimeter_se float64 area_se float64 smoothness_se float64 compactness_se float64 concavity_se float64 concave points_se float64 symmetry_se float64 fractal_dimension_se float64 radius_worst float64 texture_worst float64 perimeter_worst float64 area_worst float64 smoothness_worst float64 compactness_worst float64 concavity_worst float64 concave points_worst float64 symmetry_worst float64 fractal_dimension_worst float64 Unnamed: 32 float64 dtype: object ##################### Head ##################### id diagnosis radius_mean texture_mean perimeter_mean area_mean smoothness_mean compactness_mean concavity_mean concave points_mean symmetry_mean fractal_dimension_mean radius_se texture_se perimeter_se area_se smoothness_se compactness_se concavity_se concave points_se symmetry_se fractal_dimension_se radius_worst texture_worst perimeter_worst area_worst smoothness_worst compactness_worst concavity_worst concave points_worst symmetry_worst \ 0 842302 M 17.99 10.38 122.80 1001.0 0.11840 0.27760 0.3001 0.14710 0.2419 0.07871 1.0950 0.9053 8.589 153.40 0.006399 0.04904 0.05373 0.01587 0.03003 0.006193 25.38 17.33 184.60 2019.0 0.1622 0.6656 0.7119 0.2654 0.4601 1 842517 M 20.57 17.77 132.90 1326.0 0.08474 0.07864 0.0869 0.07017 0.1812 0.05667 0.5435 0.7339 3.398 74.08 0.005225 0.01308 0.01860 0.01340 0.01389 0.003532 24.99 23.41 158.80 1956.0 0.1238 0.1866 0.2416 0.1860 0.2750 2 84300903 M 19.69 21.25 130.00 1203.0 0.10960 0.15990 0.1974 0.12790 0.2069 0.05999 0.7456 0.7869 4.585 94.03 0.006150 0.04006 0.03832 0.02058 0.02250 0.004571 23.57 25.53 152.50 1709.0 0.1444 0.4245 0.4504 0.2430 0.3613 3 84348301 M 11.42 20.38 77.58 386.1 0.14250 0.28390 0.2414 0.10520 0.2597 0.09744 0.4956 1.1560 3.445 27.23 0.009110 0.07458 0.05661 0.01867 0.05963 0.009208 14.91 26.50 98.87 567.7 0.2098 0.8663 0.6869 0.2575 0.6638 4 84358402 M 20.29 14.34 135.10 1297.0 0.10030 0.13280 0.1980 0.10430 0.1809 0.05883 0.7572 0.7813 5.438 94.44 0.011490 0.02461 0.05688 0.01885 0.01756 0.005115 22.54 16.67 152.20 1575.0 0.1374 0.2050 0.4000 0.1625 0.2364 fractal_dimension_worst Unnamed: 32 0 0.11890 NaN 1 0.08902 NaN 2 0.08758 NaN 3 0.17300 NaN 4 0.07678 NaN ##################### Tail ##################### id diagnosis radius_mean texture_mean perimeter_mean area_mean smoothness_mean compactness_mean concavity_mean concave points_mean symmetry_mean fractal_dimension_mean radius_se texture_se perimeter_se area_se smoothness_se compactness_se concavity_se concave points_se symmetry_se fractal_dimension_se radius_worst texture_worst perimeter_worst area_worst smoothness_worst compactness_worst concavity_worst concave points_worst symmetry_worst \ 564 926424 M 21.56 22.39 142.00 1479.0 0.11100 0.11590 0.24390 0.13890 0.1726 0.05623 1.1760 1.256 7.673 158.70 0.010300 0.02891 0.05198 0.02454 0.01114 0.004239 25.450 26.40 166.10 2027.0 0.14100 0.21130 0.4107 0.2216 0.2060 565 926682 M 20.13 28.25 131.20 1261.0 0.09780 0.10340 0.14400 0.09791 0.1752 0.05533 0.7655 2.463 5.203 99.04 0.005769 0.02423 0.03950 0.01678 0.01898 0.002498 23.690 38.25 155.00 1731.0 0.11660 0.19220 0.3215 0.1628 0.2572 566 926954 M 16.60 28.08 108.30 858.1 0.08455 0.10230 0.09251 0.05302 0.1590 0.05648 0.4564 1.075 3.425 48.55 0.005903 0.03731 0.04730 0.01557 0.01318 0.003892 18.980 34.12 126.70 1124.0 0.11390 0.30940 0.3403 0.1418 0.2218 567 927241 M 20.60 29.33 140.10 1265.0 0.11780 0.27700 0.35140 0.15200 0.2397 0.07016 0.7260 1.595 5.772 86.22 0.006522 0.06158 0.07117 0.01664 0.02324 0.006185 25.740 39.42 184.60 1821.0 0.16500 0.86810 0.9387 0.2650 0.4087 568 92751 B 7.76 24.54 47.92 181.0 0.05263 0.04362 0.00000 0.00000 0.1587 0.05884 0.3857 1.428 2.548 19.15 0.007189 0.00466 0.00000 0.00000 0.02676 0.002783 9.456 30.37 59.16 268.6 0.08996 0.06444 0.0000 0.0000 0.2871 fractal_dimension_worst Unnamed: 32 564 0.07115 NaN 565 0.06637 NaN 566 0.07820 NaN 567 0.12400 NaN 568 0.07039 NaN ##################### NA ##################### id 0 diagnosis 0 radius_mean 0 texture_mean 0 perimeter_mean 0 area_mean 0 smoothness_mean 0 compactness_mean 0 concavity_mean 0 concave points_mean 0 symmetry_mean 0 fractal_dimension_mean 0 radius_se 0 texture_se 0 perimeter_se 0 area_se 0 smoothness_se 0 compactness_se 0 concavity_se 0 concave points_se 0 symmetry_se 0 fractal_dimension_se 0 radius_worst 0 texture_worst 0 perimeter_worst 0 area_worst 0 smoothness_worst 0 compactness_worst 0 concavity_worst 0 concave points_worst 0 symmetry_worst 0 fractal_dimension_worst 0 Unnamed: 32 569 dtype: int64 ##################### Quantiles ##################### 0.00 0.05 0.50 0.95 0.99 1.00 id 8670.000000 90267.000000 906024.000000 9.042446e+07 9.010343e+08 9.113205e+08 radius_mean 6.981000 9.529200 13.370000 2.057600e+01 2.437160e+01 2.811000e+01 texture_mean 9.710000 13.088000 18.840000 2.715000e+01 3.065200e+01 3.928000e+01 perimeter_mean 43.790000 60.496000 86.240000 1.358200e+02 1.657240e+02 1.885000e+02 area_mean 143.500000 275.780000 551.100000 1.309800e+03 1.786600e+03 2.501000e+03 smoothness_mean 0.052630 0.075042 0.095870 1.187800e-01 1.328880e-01 1.634000e-01 compactness_mean 0.019380 0.040660 0.092630 2.087000e-01 2.771920e-01 3.454000e-01 concavity_mean 0.000000 0.004983 0.061540 2.430200e-01 3.516880e-01 4.268000e-01 concave points_mean 0.000000 0.005621 0.033500 1.257400e-01 1.642080e-01 2.012000e-01 symmetry_mean 0.106000 0.141500 0.179200 2.307200e-01 2.595640e-01 3.040000e-01 fractal_dimension_mean 0.049960 0.053926 0.061540 7.609000e-02 8.543760e-02 9.744000e-02 radius_se 0.111500 0.160100 0.324200 9.595200e-01 1.291320e+00 2.873000e+00 texture_se 0.360200 0.540140 1.108000 2.212000e+00 2.915440e+00 4.885000e+00 perimeter_se 0.757000 1.132800 2.287000 7.041600e+00 9.690040e+00 2.198000e+01 area_se 6.802000 11.360000 24.530000 1.158000e+02 1.776840e+02 5.422000e+02 smoothness_se 0.001713 0.003690 0.006380 1.264400e-02 1.725800e-02 3.113000e-02 compactness_se 0.002252 0.007892 0.020450 6.057800e-02 8.987200e-02 1.354000e-01 concavity_se 0.000000 0.003253 0.025890 7.893600e-02 1.222920e-01 3.960000e-01 concave points_se 0.000000 0.003831 0.010930 2.288400e-02 3.119360e-02 5.279000e-02 symmetry_se 0.007882 0.011758 0.018730 3.498800e-02 5.220800e-02 7.895000e-02 fractal_dimension_se 0.000895 0.001522 0.003187 7.959800e-03 1.264960e-02 2.984000e-02 radius_worst 7.930000 10.534000 14.970000 2.564000e+01 3.076280e+01 3.604000e+01 texture_worst 12.020000 16.574000 25.410000 3.630000e+01 4.180240e+01 4.954000e+01 perimeter_worst 50.410000 67.856000 97.660000 1.716400e+02 2.083040e+02 2.512000e+02 area_worst 185.200000 331.060000 686.500000 2.009600e+03 2.918160e+03 4.254000e+03 smoothness_worst 0.071170 0.095734 0.131300 1.718400e-01 1.889080e-01 2.226000e-01 compactness_worst 0.027290 0.071196 0.211900 5.641200e-01 7.786440e-01 1.058000e+00 concavity_worst 0.000000 0.018360 0.226700 6.823800e-01 9.023800e-01 1.252000e+00 concave points_worst 0.000000 0.024286 0.099930 2.369200e-01 2.692160e-01 2.910000e-01 symmetry_worst 0.156500 0.212700 0.282200 4.061600e-01 4.869080e-01 6.638000e-01 fractal_dimension_worst 0.055040 0.062558 0.080040 1.195200e-01 1.406280e-01 2.075000e-01 Unnamed: 32 NaN NaN NaN NaN NaN NaN # The id and Unnamed: 32 columns should be removed, since they are unnecessary. data.drop(['id', 'Unnamed: 32'], axis=1, inplace=True) # Find missing values data.isnull().sum() diagnosis 0 radius_mean 0 texture_mean 0 perimeter_mean 0 area_mean 0 smoothness_mean 0 compactness_mean 0 concavity_mean 0 concave points_mean 0 symmetry_mean 0 fractal_dimension_mean 0 radius_se 0 texture_se 0 perimeter_se 0 area_se 0 smoothness_se 0 compactness_se 0 concavity_se 0 concave points_se 0 symmetry_se 0 fractal_dimension_se 0 radius_worst 0 texture_worst 0 perimeter_worst 0 area_worst 0 smoothness_worst 0 compactness_worst 0 concavity_worst 0 concave points_worst 0 symmetry_worst 0 fractal_dimension_worst 0 dtype: int64
Визуализация данных
Визуализации также могут быть полезны для изучения структуры данных. Вы можете использовать гистограммы и диаграммы, чтобы получить представление о распределении данных.
Чтобы построить гистограммы числовых столбцов, вы можете использовать метод hist() фрейма данных. Это создаст гистограмму для каждого числового столбца, показывающую распределение данных.
# Plot histograms of the numerical columns data.hist(bins=50, figsize=(20, 15)) plt.show()
# Plot box plots of the columns data.plot(kind='box', subplots=True, layout=(6, 6), sharex=False, sharey=False, figsize=(15, 15)) plt.show()
plt.figure(figsize=(10,6),dpi=50) sns.countplot(data['diagnosis'],palette='Set2') plt.title('Diagnosis') plt.show()
Корреляции
Проанализируйте корреляции между различными характеристиками в данных и обсудите, как они могут быть связаны с раком молочной железы.
Для вычисления корреляций код использует метод corr() фрейма данных, который вычисляет коэффициент корреляции Пирсона между каждой парой столбцов в фрейме данных. Коэффициент корреляции Пирсона является мерой линейной зависимости между двумя переменными и находится в диапазоне от -1 (полная отрицательная корреляция) до 1 (полная положительная корреляция).
# Find the correlation between the features corr = data.corr() plt.figure(figsize=(20, 20)) sns.heatmap(corr, annot=True, fmt='.2f') plt.show()
# Plot pairwise relationships to check the correlations between the mean features. sns.pairplot(data, hue='diagnosis', vars=['radius_mean', 'texture_mean', 'perimeter_mean', 'area_mean', 'smoothness_mean']) plt.show()
data.corr()['diagnosis'].sort_values(ascending=False) cancerous = data.corr()['diagnosis'].sort_values(ascending=False) # Set the figure size and resolution plt.figure(figsize=(10, 6), dpi=150) # Create a bar plot of the correlations sns.barplot(x=cancerous.index, y=cancerous.values) # Rotate the x-tick labels plt.xticks(rotation=90) # Add labels to the bars for container in ax.containers: ax.bar_label(container, rotation=90) # Show the plot plt.show()
Выбор функции
Выбор функций — это процесс выбора подмножества соответствующих функций из большего набора функций для использования в моделировании. Он часто используется в машинном обучении для повышения точности и эффективности модели за счет уменьшения количества функций, которые модель должна учитывать.
# Unique values of "diagnosis" column data['diagnosis'].unique() # Encode “diagnosis” to numerical values data['diagnosis'] = [1 if each == 'M' else 0 for each in data['diagnosis']] data.head()
Нам нужно будет извлечь функции и метки из фрейма данных. Особенности — это данные, которые будут использоваться для прогнозирования метки, которая в данном случае является диагнозом рака молочной железы (т. е. злокачественного или доброкачественного).
Часто бывает полезно комбинировать несколько методов выбора признаков, чтобы получить наилучшие результаты. Вы можете использовать класс FeatureUnion из модуля sklearn.pipeline для объединения различных методов выбора функций в конвейере.
# Combine PCA and Feature Selection with FeatureUnion from sklearn.pipeline import Pipeline, FeatureUnion from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import chi2 # Create a SelectKBest object to select features with two best ANOVA F-Values kbest = SelectKBest(chi2, k=2) kbest SelectKBest(k=2, score_func=<function chi2 at 0x7faa4344eef0>) # Create a PCA object pca = PCA(n_components=2) # Create a FeatureUnion that combines PCA and kbest combined_features = FeatureUnion([("pca", pca), ("univ_select", kbest)]) # Create a pipeline that combines the FeatureUnion with a classifier pipeline = Pipeline([("features", combined_features), ("svc", SVC())]) # Create a grid search object grid = GridSearchCV(pipeline, param_grid={'features__pca__n_components': [1, 2, 3], 'features__univ_select__k': [1, 2]}, cv=5) # Fit the grid search grid.fit(X, y) # Print the best parameters print(grid.best_params_) {'features__pca__n_components': 2, 'features__univ_select__k': 2}
Анализ главных компонентов (PCA)
Мы можем использовать класс StandardScaler из модуля sklearn.preprocessing для стандартизации функций. Это важный шаг, поскольку он гарантирует, что все функции находятся в одном масштабе, что может повысить производительность многих алгоритмов машинного обучения:
# Standardize the data scaler = StandardScaler() data = scaler.fit_transform(data) # Create a PCA that will retain 99% of the variance pca = PCA(n_components=0.99, whiten=True) # Fit the PCA on the data pca.fit(data) # Print the number of components required to retain 99% of the variance print(pca.n_components_) 18
Мы можем использовать атрибут Explain_varianceratio объекта PCA, чтобы увидеть, какая дисперсия объясняется каждым основным компонентом:
# Print the explained variance print(pca.explained_variance_ratio_) print(pca.explained_variance_ratio_.sum()) [0.44896035 0.18472104 0.09183385 0.06446333 0.05351866 0.03895187 0.02208771 0.0156405 0.01344822 0.01131915 0.00983405 0.00938664 0.00841969 0.0068476 0.00479278 0.00284395 0.00257613 0.00190437] 0.9915498949973757 # Transform the data onto the first two principal components reduced_data = pca.transform(data) # Print the shape of the reduced data print(reduced_data.shape) (569, 18)
Мы применяем стандартное масштабирование к входным данным X, а затем выполняем PCA, чтобы уменьшить размерность до 2. Полученные основные компоненты сохраняются в кадре данных pca_df вместе с целевой переменной y.
Стандартное масштабирование — это шаг предварительной обработки, который масштабирует характеристики данных таким образом, чтобы они имели нулевое среднее значение и единичную дисперсию. Это полезно для многих алгоритмов машинного обучения, поскольку может помочь удалить масштаб функций и сделать модель более устойчивой к изменениям данных.
Класс PCA в scikit-learn выполняет PCA, сначала стандартизируя данные, а затем вычисляя разложение по сингулярным числам (SVD) матрицы данных. Результирующие главные компоненты являются собственными векторами ковариационной матрицы данных и ранжируются в порядке убывания собственного значения. Установив для параметра n_components значение 2, вы выбираете первые два основных компонента.
Результирующий кадр данных pca_df содержит первые два основных компонента в виде столбцов «PC1» и «PC2» и целевую переменную y в качестве последнего столбца.
# Extract the features and labels X = data.drop('diagnosis', axis=1) y = data['diagnosis'] X.describe()
def create_pca_df(X, y): X = StandardScaler().fit_transform(X) pca = PCA(n_components=2) pca_fit = pca.fit_transform(X) pca_df = pd.DataFrame(data=pca_fit, columns=['PC1', 'PC2']) final_df = pd.concat([pca_df, pd.DataFrame(y)], axis=1) return final_df pca_df = create_pca_df(X, y) # Create a dataframe with the first two principal components pca_df.head()
import random def plot_pca(dataframe, target): fig = plt.figure(figsize=(7, 5)) ax = fig.add_subplot(1, 1, 1) ax.set_xlabel('PC1', fontsize=15) ax.set_ylabel('PC2', fontsize=15) ax.set_title(f'{target.capitalize()} ', fontsize=20) targets = list(dataframe[target].unique()) colors = random.sample(['r', 'b', "g", "y"], len(targets)) for t, color in zip(targets, colors): indices = dataframe[target] == t ax.scatter(dataframe.loc[indices, 'PC1'], dataframe.loc[indices, 'PC2'], c=color, s=50) ax.legend(targets) ax.grid() plt.show() plot_pca(pca_df, "diagnosis")
Это функция, которая визуализирует результаты анализа основных компонентов (PCA) для заданного фрейма данных. Функция принимает два аргумента:
dataframe
: кадр данных pandas, содержащий данные, преобразованные с помощью PCA. Фрейм данных должен иметь два столбца с именами «PC1» и «PC2», которые содержат значения первого и второго основных компонентов соответственно.target
: строка, представляющая целевую переменную в фрейме данных. Функция будет использовать этот столбец для окрашивания точек данных в соответствии с уникальными значениями целевой переменной.
Функция начинается с создания новой фигуры и установки меток по осям x и y, а также заголовка. Затем он создает список уникальных значений целевой переменной и генерирует список случайных цветов для каждого значения.
Затем функция перебирает уникальные значения целевой переменной и соответствующие цвета. Для каждого значения он фильтрует фрейм данных, чтобы выбрать только те строки, в которых значение целевой переменной равно текущему значению. Затем он строит эти строки в виде диаграммы рассеяния, используя столбцы «PC1» и «PC2» в качестве координат x и y соответственно, а текущий цвет — в качестве цвета точек.
Наконец, функция добавляет к графику легенду, используя список уникальных значений целевой переменной, и показывает график.
Машинное обучение
Важно оценить производительность модели машинного обучения на отдельном тестовом наборе данных, так как это может дать вам более точную оценку того, как модель будет работать с невидимыми данными. Использование обучающих данных для оценки модели может привести к переоснащению, когда модель хорошо работает с обучающими данными, но плохо с новыми данными.
# Splitting the data from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) # Logistic Regression from sklearn.linear_model import LogisticRegression model = LogisticRegression() model.fit(X_train, y_train) # Accuracy from sklearn.metrics import accuracy_score y_pred = model.predict(X_test) accuracy_score(y_test, y_pred) 0.9473684210526315 from sklearn.metrics import classification_report # Generate a classification report print(classification_report(y_test,y_pred))
# Random Forest from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier(n_estimators=200) model.fit(X_train, y_train) # Accuracy y_pred = model.predict(X_test) accuracy_score(y_test, y_pred) 0.9473684210526315 # Support Vector Machine from sklearn.svm import SVC model = SVC() model.fit(X_train, y_train) # Accuracy y_pred = model.predict(X_test) accuracy_score(y_test, y_pred) 0.9035087719298246 # K Nearest Neighbours from sklearn.neighbors import KNeighborsClassifier model = KNeighborsClassifier(n_neighbors=5) model.fit(X_train, y_train) # Accuracy y_pred = model.predict(X_test) accuracy_score(y_test, y_pred)
0.9385964912280702
# Naive Bayes from sklearn.naive_bayes import GaussianNB model = GaussianNB() model.fit(X_train, y_train) # Accuracy y_pred = model.predict(X_test) accuracy_score(y_test, y_pred) 0.9473684210526315 # Decision Tree from sklearn.tree import DecisionTreeClassifier model = DecisionTreeClassifier() model.fit(X_train, y_train) # Accuracy y_pred = model.predict(X_test) accuracy_score(y_test, y_pred)
0.9385964912280702
# XGBoost from xgboost import XGBClassifier model = XGBClassifier() model.fit(X_train, y_train) # Accuracy y_pred = model.predict(X_test) accuracy_score(y_test, y_pred) 0.956140350877193
Настройка гиперпараметров
from sklearn.model_selection import RandomizedSearchCV # Number of trees in random forest n_estimators = [int(x) for x in np.linspace(start=200, stop=2000, num=10)] # Number of features to consider at every split max_features = ['auto', 'sqrt'] # Maximum number of levels in tree max_depth = [int(x) for x in np.linspace(10, 110, num=11)] max_depth.append(None) # Minimum number of samples required to split a node min_samples_split = [2, 5, 10] # Minimum number of samples required at each leaf node min_samples_leaf = [1, 2, 4] # Method of selecting samples for training each tree bootstrap = [True, False] # Create the random grid random_grid = {'n_estimators': n_estimators, 'max_features': max_features, 'max_depth': max_depth, 'min_samples_split': min_samples_split, 'min_samples_leaf': min_samples_leaf, 'bootstrap': bootstrap} # Use the random grid to search for best hyperparameters # First create the base model to tune rf = RandomForestClassifier() # Random search of parameters, using 3 fold cross validation, # search across 100 different combinations, and use all available cores rf_random = RandomizedSearchCV(estimator=rf, param_distributions=random_grid, n_iter=100, cv=3, verbose=2, random_state=42, n_jobs=-1) # Fit the random search model rf_random.fit(X_train, y_train) rf_random.best_params_ # Accuracy y_pred = rf_random.predict(X_test) accuracy_score(y_test, y_pred) # Confusion Matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred) cm
array([[72, 0], [ 5, 37]])
Заключение
В заключение, использование машинного обучения, настройки гиперпараметров и анализа основных компонентов (PCA) может помочь максимизировать производительность моделей прогнозирования рака молочной железы. Алгоритмы машинного обучения могут изучать сложные взаимосвязи между функциями и целевой переменной и могут быть обучены делать точные прогнозы на основе новых данных. Настройка гиперпараметров может помочь оптимизировать производительность алгоритмов машинного обучения, найдя наилучшее сочетание гиперпараметров. PCA может уменьшить размерность данных и помочь выявить закономерности и взаимосвязи, которые могут быть не очевидны в исходном наборе данных, что может повысить точность прогнозов. Комбинируя эти методы, можно построить высокоэффективные модели прогнозирования рака молочной железы, которые могут точно классифицировать опухоли как доброкачественные или злокачественные.
Спасибо, что прочитали эту статью. Вы можете получить доступ к подробным кодам проекта и других проектов в мой аккаунт Github или аккаунт Kaggle. Удачного кодирования!
Пожалуйста, не стесняйтесь связаться со мной, если вам нужна дополнительная информация.