Машинное обучение входа с нуля Kaggle_Crime_Prediction
Примечание. Эта статья была написана в 2019.10 и является первым проектом машинного обучения, с которым связались блоггеры. Во многих местах рассмотрение недостаточно исчерпывающее, а пояснения в статье не к месту.
Обзор темы
Название: Предсказание преступления
Введение. Вам необходимо прогнозировать типы преступлений, которые могут произойти, на основе соответствующих данных. Данные обучения находятся в train.csv, а тестовые данные — в test.csv, Наконец, вам нужно отправить результаты прогноза для набора тестов.
Описание данных: этот набор данных содержит события из системы отчетности о преступлениях. Диапазон данных с 1 января 2003 г. по 13 мая 2015 г. Каждая часть данных содержит только одно преступление.
Поля данных: Даты — временная метка события преступления. Категория — категория события преступления (отображается только в train.csv), это целевая переменная, которую необходимо предсказать. Descript - подробное описание преступления (появляется только в train.csv) DayOfWeek - день недели PdDistrict - название полицейского участка Резолюция - как было раскрыто преступление (появляется только в train.csv) Address - примерный адрес улицы X преступление - долгота Y - широта
TIPS
Рекомендуемые пакеты Python: scikit-learn, numpy, csv.
Я ленив с точки зрения соответствующего опыта, вы можете найти следующую информацию для получения дополнительной информации.
google: "проблема классификации прогнозов Python"
google: "kaggle титаник в действии"
предисловие
Подготовка: измените источник зеркала и установите необходимые библиотеки и пакеты с помощью командной строки cmd (новые и трудоемкие шаги)
0.1 Вызов библиотеки в начале (сначала для рисования)
Должно быть перед использованием библиотеки pythonимпортировать библиотеку питонаиспользовать код импорта
import numpy as np # 科学计算
import matplotlib.pyplot as plt # python绘图库
import pandas as pd # 数据分析
import seaborn as sns # 作图
import string
import matplotlib.colors as colors # 添加颜色
0.2 Используйте pandas для загрузки обучающих и тестовых данных csv, а затем анализируйте данные
train = pd.read_csv("D:\Computer\kaggle machine learning/task/train.csv")
test = pd.read_csv("D:\Computer\kaggle machine learning/task/test.csv")
train.info()
test.info() #获取文件中的数据类型及数目
Результат выглядит следующим образом:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 600000 entries, 0 to 599999
Data columns (total 9 columns):
Dates 600000 non-null object
Category 600000 non-null object
Descript 600000 non-null object
DayOfWeek 600000 non-null object
PdDistrict 600000 non-null object
Resolution 600000 non-null object
Address 600000 non-null object
X 600000 non-null float64
Y 600000 non-null float64
dtypes: float64(2), object(7)
memory usage: 41.2+ MB
Data columns (total 6 columns):
Dates 250000 non-null object
DayOfWeek 250000 non-null object
PdDistrict 250000 non-null object
Address 250000 non-null object
X 250000 non-null float64
Y 250000 non-null float64
dtypes: float64(2), object(4)
memory usage: 11.4+ MB
print(train.isnull().sum()) # 查看数据中有没有缺失项
Dates 0
Category 0
Descript 0
DayOfWeek 0
PdDistrict 0
Resolution 0
Address 0
X 0
Y 0
dtype: int64
print(test.isnull().sum())
Dates 0
DayOfWeek 0
PdDistrict 0
Address 0
X 0
Y 0
dtype: int64
Обнаружено, что в обучающем наборе поезда имеется 60 Вт фрагментов данных, а в тестовом наборе — 25 Вт, и в данных нет пропущенных данных.
1. Провести предварительный анализ данных и анализ признаков
1.1 Категория (целевая переменная для прогнозирования)
print(train['Category'].describe())
count 600000
unique 39
top LARCENY/THEFT
freq 119238
Name: Category, dtype: object
cate_group = train.groupby(by='Category').size()
cate_group
cate_num = len(cate_group.index)
cate_num
cate_group.index = cate_group.index.map(string.capwords)
cate_group.sort_values(ascending=False,inplace=True)
# ascending=False按降序排序,指定inplace=True,将同时修改原数据
cate_group.plot(kind='bar',color=sns.color_palette('coolwarm',cate_num))
# 补充logy=True 绘制y轴的对数图形(把图形放大,看得更细腻,大佬操作)
plt.title('Number of Crime types')
plt.show()
Что, если мы используем экспоненциальную форму (используйте logy=True, чтобы включить логарифмы)
Мы заметили, что 6 самых многочисленных видов преступлений следующие:
Category
ASSAULT
DRUG/NARCOTIC
LARCENY/THEFT
NON-CRIMINAL
OTHER OFFENSES
VEHICLE THEFT
1.2 DayOfWeek
print(train['DayOfWeek'].describe())
count 600000
unique 7
top Friday
freq 91634
Name: DayOfWeek, dtype: object
Day_group = train.groupby(by='DayOfWeek').size()
Day_group
Day_num = len(Day_group.index)
Day_num
Day_group.index = Day_group.index.map(string.capwords)
Day_group.sort_values(ascending=False,inplace=True)
Day_group.plot(kind='bar',color=sns.color_palette('coolwarm',Day_num))
plt.title('The Number of Crime types')
plt.show()
Анализ: За неделю наибольшее количество преступлений в пятницу, а в воскресенье наименьшее.Вообще говоря, разница между количеством преступлений в пять дней недели не очень велика, и это в основном 80000+
1.3 PdDistrict
print(train['PdDistrict'].describe())
count 600000
unique 10
top SOUTHERN
freq 107457
Name: PdDistrict, dtype: object
dis_group = train.groupby(by='PdDistrict').size()
dis_group
dis_group = dis_group/sum(dis_group)
dis_group.index = dis_group.index.map(string.capwords)
dis_group.sort_values(ascending=True,inplace=True)
dis_group.plot(kind='barh',figsize=(15,10),fontsize=10,color=sns.color_palette('coolwarm',10))
plt.title('The Frequncy of crimes by district',fontsize=15)
plt.show()
Анализ: Район с высокой частотой преступности находится на юге, за ним следует Северная миссия, а Ричмонд является лучшим с точки зрения общественной безопасности.
1.4 year/month/day
由于我们需要对年月日分开分析,所以我们需要将year/month/day这样形式的字符分开
所以需要以下代码进行分析
fig=plt.figure()
fig.set(alpha=0.2)
#转化dates数据字段字符串类型为date数据类型 把date的三个量分离开
train['Dates']=pd.to_datetime(train['Dates'])
train['year'] = train.Dates.dt.year
train['month'] = train.Dates.dt.month
train['day'] = train.Dates.dt.day
train['hour'] = train.Dates.dt.hour
plt.subplot2grid((3,1),(0,0))
year_group = data_train.groupby(by='year').size()
plt.plot(year_group.index[:-1],year_group[:-1],'ks-')
plt.title('statistics of criminal cases measured by year')
plt.xlabel('year')
plt.ylabel('number of people')
plt.subplot2grid((3,1),(1,0))
month_group = data_train.groupby(by='month').size()
plt.plot(month_group,'ks-')
plt.title('statistics of criminal cases measured by month')
plt.xlabel('month')
plt.ylabel('number of people')
plt.subplot2grid((3,1),(2,0))
day_group = data_train.groupby(by='day').size()
plt.plot(day_group,'ks-')
plt.title('statistics of criminal cases measured by day')
plt.xlabel('day')
plt.ylabel('number of people')
Вывод некоторых данных после выделения строки поля времени выглядит следующим образом (описание данных успешно декомпозировано)
year 600000 non-null int64
month 600000 non-null int64
day 600000 non-null int64
hour 600000 non-null int64
dtypes: datetime64[ns](1), float64(2), int64(5), object(4)
Анализ: число преступлений было наименьшим в 2011 г., число преступлений выросло после 2011 г., а число преступлений было наибольшим в 2013 г., месяцем с наименьшим числом преступлений в августе и наибольшим числом преступлений в октябре и май; кроме явных колебаний в начале и конце месяца, a существенного изменения количества преступлений в течение месяца не произошло, в основном оно оставалось стабильным на уровне 171 500-20 000. Для данных дня она ближе к линейной зависимости.
1.5 Количество преступлений в определенное время недели
week_group = train.groupby(['DayOfWeek','hour']).size() #多重分组
week_group = week_group.unstack() #对分组后的多重索引转为xy索引
week_group.T.plot(figsize=(12,8)) #行列互换后画图
plt.xlabel('hour of day',size=15)
plt.ylabel('Number of crimes',size=15)
plt.show()
Анализ данных: количество преступлений в 12:00 и 18:00 самое высокое, ранним утром количество начинает значительно снижаться, причем количество преступлений сильно различается в разные периоды времени
PS Вы должны быть осторожны, час в groupby(['DayOfWeek','hour']) не определен, поэтому я должен появиться в предыдущей строке кода (разделить три параметра в году, месяце и дне) как следует:
train['hour'] = train.Dates.dt.hour
1.6 Address
print(train['Address'].describe())
count 600000
unique 22262
top 800 Block of BRYANT ST
freq 18064
Name: Address, dtype: object
Из приведенной выше таблицы видно, что существует много типов адресных данных, распределение очень разбросано, размерность велика, и трудно выбрать функции.
1.7 Resolution
(данные только на тренировочном наборе)
print(train['Resolution'].describe())
count 600000
unique 17
top NONE
freq 359779
Name: Resolution, dtype: object
Анализ: обнаружено, что больше данных содержится только в трех резолюциях, а остальные данные относительно малы.
1.8 Descript
(данные только на тренировочном наборе)
print(train['Descript'].describe())
count 600000
unique 862
top GRAND THEFT FROM LOCKED AUTO
freq 41046
Анализ: было обнаружено, что существует 862 вида данных дескрипта, а распределение разбросано, и ситуация уступает только адресу.
1.9 Координаты положения X Y
print(train['X'].describe())
print(train['Y'].describe())
count 600000.000000
mean -122.422635
std 0.030175
min -122.513642
25% -122.432956
50% -122.416442
75% -122.406959
max -120.500000
Name: X, dtype: float64
count 600000.000000
mean 37.770856
std 0.447932
min 37.707920
25% 37.752441
50% 37.775421
75% 37.784353
max 90.000000
Name: Y, dtype: float64
Анализ: изображение координат не нарисовано, но стандартное отклонение (стандартное отклонение) координат X и Y составляет 0,030175 и 0,447932 соответственно, что, очевидно, очень мало, поэтому видно, что изменение географических координат невелико, и этот параметр не влияет на результаты слишком очевидное влияние.
1.10 Взаимосвязь между 6 основными категориями преступлений и часом
top6 = list(cate_group.index[:6])
tmp = train[train['Category'].map(string.capwords).isin(top6)]
tmp_group = tmp.groupby(['Category','hour']).size()
tmp_group = tmp_group.unstack()
tmp_group.T.plot(figsize=(12,6),style='o-')
plt.show()
Анализ: После 5 часов число начало увеличиваться, и число достигло максимума в 12 и 18 часов. Разные периоды времени влияли на разные преступления.
1.11 Взаимосвязь между 6 основными категориями преступлений и месяцем
mon_g = tmp.groupby(['Category','month']).size()
mon_g = mon_g.unstack()
for i in range(6):
mon_g.iloc[i] = mon_g.iloc[i]/mon_g.sum(axis=1)[i]
mon_g.T.plot(figsize=(12,6),style='o-')
plt.show()
Анализ: разные месяцы оказывают большое влияние на преступность, май и октябрь — пик преступности, нападение способствует пику
1.12 Взаимосвязь между 6 основными категориями преступлений и годом
mon_g = tmp.groupby(['Category','year']).size()
mon_g = mon_g.unstack()
for i in range(6):
mon_g.iloc[i] = mon_g.iloc[i]/mon_g.sum(axis=1)[i]
mon_g.T.plot(figsize=(12,6),style='o-')
plt.show()
Анализ: Совершенно очевидно, что уровень преступности УГОН ТРАНСПОРТНЫХ СРЕДСТВ был чрезвычайно высок с 2003 по 2006 год, а затем был низким, а частота различных видов преступлений начала значительно снижаться в 2014 году (вероятно потому, что правопорядок стал лучше ).
2. Обработка данных
#引入python中的sklearn库
from sklearn import preprocessing
#from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
#from sklearn.feature_selection import SelectKBest
#from sklearn.feature_selection import chi2
2.1 Маркировка цели классификации
#对分类目标做标签化处理
from sklearn.preprocessing import LabelEncoder #用于Label编码
from sklearn.preprocessing import OneHotEncoder #用于one-hot编码
label = preprocessing.LabelEncoder()
target = label.fit_transform(train.Category)
target
crime = label.fit_transform(train.Category)
#对test数据中的Dates进行同样的分离处理
test['date'] = pd.to_datetime(test['Dates'])
test['year'] = test.date.dt.year
test['month'] = test.date.dt.month
test['day'] = test.date.dt.day
test['hour'] = test.date.dt.hour
test.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 250000 entries, 0 to 249999
Data columns (total 10 columns):
Dates 250000 non-null datetime64[ns]
DayOfWeek 250000 non-null object
PdDistrict 250000 non-null object
Address 250000 non-null object
X 250000 non-null float64
Y 250000 non-null float64
year 250000 non-null int64
month 250000 non-null int64
day 250000 non-null int64
hour 250000 non-null int64
dtypes: datetime64[ns](1), float64(2), int64(4), object(3)
memory usage: 19.1+ MB
2.2 Бинаризация данных поезда и объединение функций
#将train数据因子化
days = pd.get_dummies(train.DayOfWeek)
district = pd.get_dummies(train.PdDistrict)
hour = pd.get_dummies(train.Dates.dt.hour)
month = pd.get_dummies(train.Dates.dt.month)
year = pd.get_dummies(train.Dates.dt.year)
#组合train特征
train= pd.concat([days,district,hour,month,year], axis=1)
train['crime'] = crime
2.3 Выполните тот же процесс бинаризации тестовых данных и объедините функции
#将test数据因子化
days = pd.get_dummies(test.DayOfWeek)
district = pd.get_dummies(test.PdDistrict)
hour = pd.get_dummies(test.Dates.dt.hour)
test= pd.concat([days, district, hour], axis=1)
month = pd.get_dummies(test.Dates.dt.month)
year = pd.get_dummies(test.Dates.dt.year)
#组合test特征
test = pd.concat([days, district, hour,month,year],axis=1)
Вышеупомянутый процесс бинаризации связан с тем, что нам нужно поместить данные в диапазон 0-1 для обработки.
необходимо построить и использоватькак показано на рисунке:
Выходные данные после обработки следующие:
print(train.head(10))
print(test.head(10))
Friday Monday Saturday Sunday Thursday ... 2012 2013 2014 2015 crime
0 0 1 0 0 0 ... 0 0 0 0 16
1 0 1 0 0 0 ... 0 0 0 0 25
2 0 1 0 0 0 ... 0 0 0 0 21
3 0 1 0 0 0 ... 0 0 0 0 21
4 0 1 0 0 0 ... 0 0 0 0 16
5 0 1 0 0 0 ... 0 0 0 0 35
6 0 1 0 0 0 ... 0 0 0 0 34
7 0 1 0 0 0 ... 0 0 0 0 21
8 0 1 0 0 0 ... 0 0 0 0 1
9 0 1 0 0 0 ... 0 0 0 0 21
[10 rows x 67 columns]
Friday Monday Saturday Sunday Thursday ... 2011 2012 2013 2014 2015
0 0 1 0 0 0 ... 0 0 0 0 0
1 0 1 0 0 0 ... 0 0 0 0 0
2 0 1 0 0 0 ... 0 0 0 0 0
3 0 1 0 0 0 ... 0 0 0 0 0
4 0 1 0 0 0 ... 0 0 0 0 0
5 0 1 0 0 0 ... 0 0 0 0 0
6 0 1 0 0 0 ... 0 0 0 0 0
7 0 1 0 0 0 ... 0 0 0 0 0
8 0 1 0 0 0 ... 0 0 0 0 0
9 0 1 0 0 0 ... 0 0 0 0 0
[10 rows x 66 columns]
3. Создайте модель и проверьте эффект модели оценки.
3.1 Представляем log_loss в sklearn
from sklearn.metrics import log_loss
import time
3.2 Выберите функции
Затем, поскольку это моделирование, нам нужновыберите функциюДля подбора модели сначала выберите дни и PdDistrict, код выглядит следующим образом:
features = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', 'BAYVIEW', 'CENTRAL', 'INGLESIDE', 'MISSION',
'NORTHERN', 'PARK', 'RICHMOND', 'SOUTHERN', 'TARAVAL', 'TENDERLOIN']
#然后添加三种时间数据参数到特征中
hourFea = [x for x in range(0,24)]
monFea = [x for x in range(1,12)]
yearFea = [x for x in range(2003,2015)]
features = features + hourFea + monFea + yearFea
3.3 Метод перекрестной проверки
Основная идея кросс-валидации состоит в том, чтобы сгруппировать исходные данные (набор данных) в определенном смысле, одну часть использовать в качестве обучающего набора (обучающего набора), а другую часть использовать в качестве проверочного набора (валидационного набора или тестовый набор).Классификатор обучается, а затем для проверки обученной модели используется проверочный набор, который используется в качестве индекса производительности для оценки классификатора. Итак, мы делим набор данных на шаге 3.4.
3.4 Разделите набор данных
#我们按照训练集6/10 测试集4/10 来划分数据集
X_train,X_test,y_train,y_test = train_test_split(train[features], train['crime'] , train_size = 0.6)
#代码解释
#X_是划分的数据集即train[features]选取特征的训练集划分为X_train,X_test两个部分,比例为3:2
#y_是划分的标签集即train['crime']打上的标签集划分为y_train,y_test两个部分
#然后让我们看看划分的数据情况吧
print("The length of original data is:", train[features].shape[0])
print("The length of train Data is:", X_train.shape[0])
print("The length of test Data is:", X_test.shape[0])
The length of original data X is: 600000
The length of train Data is: 360000
The length of test Data is: 240000
3.5 Импорт модели из библиотеки sklearn для обучения
(1) Наивный Байес
Формула модели:
- Правая часть формулы — это сводная история.
- Левая часть формулы предсказывает будущее
- Если рассматривать Y как категорию,как особенность,известные характеристикив случаеклассовые вероятности, аВсе расчеты преобразованы в категориираспределение признаков.
- Концепция Наивного Байеса: предположение о независимости, которое предполагает, что каждый признак является независимым и некоррелированным.
- когда функцияПри вычисляется условная вероятность всех категорий и в качестве категории для классификации выбирается категория с наибольшей условной вероятностью. Поскольку знаменатель приведенной выше формулы одинаков для каждой категории, знаменатель можно не учитывать при расчете, т. е.
Простота наивного байесовского метода отражается в его предположении о независимости для каждого условия, что значительно сокращает пространство гипотез параметров после добавления независимого предположения.
Теорема Байеса направлена на вычислениеЗначение , то есть какова вероятность того, что произойдет А, если известно, что произойдет Б. В большинстве случаев B — это наблюдаемое событие, например «вчера шел дождь», а A — предсказанный результат «сегодня будет дождь». Для интеллектуального анализа данных B обычно является наблюдаемым индивидуумом выборки, а A — категорией, к которой принадлежит прогнозируемый индивидуум. Итак, проще говоря, байесовский подход вычисляет вероятность того, что B относится к классу A.
Мое личное понимание этой моделиУсловная возможность
Код реализован следующим образом:
from sklearn.naive_bayes import BernoulliNB
NB = BernoulliNB()
nbStart = time.time()
NB.fit(X_train,y_train)
nbCostTime = time.time() - nbStart
predicted = np.array(NB.predict_proba(X_test))
print("BernoulliNB cost time=%fs" %(nbCostTime))
print("BernoulliNB log_loss=%f" %(log_loss(y_test, predicted)))
BernoulliNB cost time=0.709103s
BernoulliNB log_loss=2.584169
from sklearn.naive_bayes import MultinomialNB
NB = MultinomialNB()
nbStart = time.time()
NB.fit(X_train,y_train)
nbCostTime = time.time() - nbStart
predicted = np.array(NB.predict_proba(X_test))
print("BernoulliNB cost time=%fs" %(nbCostTime))
print("BernoulliNB log_loss=%f" %(log_loss(y_test, predicted)))
BernoulliNB cost time=0.631253s
BernoulliNB log_loss=2.585822
(2) Логистическая регрессия
Логистическая регрессия также известна как логарифмическая регрессия шансов.
Модель логистической регрессии — это классификационная модель, выраженная в виде условного распределения вероятностей., где случайная величинаценностьразмерные действительные векторы, например.,Принимает значение 0 или 1
Для задачи бинарной классификации вывод:, модель бинарной регрессииявляется реальным значением, мы хотим иметь идеальную ступенчатую функцию, которая поможет мне достичьПреобразование значения в значение 0/1, поэтому я нашелфункция вместо этого:
После использования этой функцииДиапазон значений: [0,1]. можно рассматривать как апостериорную оценку вероятности для класса 1То есть если есть контрольная точка, то вы можете использоватьРезультат, вычисленный функцией, считается точкойРазмер вероятности принадлежности к 1 классу.
Итак, вполне естественно, мы положилиЗначение, рассчитанное функцией, больше или равное 0,5 классифицируется как категория 1, а значение меньше 0,5 классифицируется как категория 0
Функция потерь для логистической функции
Решение модели для логистической регрессии
Код реализован следующим образом:
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(C=.01)
lrStart= time.time()
lr.fit(X_train,y_train)
lrCostTime = time.time() - lrStart
predicted = np.array(lr.predict_proba(X_test))
print("LogisticRegression cost time=%fs" %(lrCostTime))
print("LogisticRegression log_loss=%f" %(log_loss(y_test, predicted)))
Вывод результата расчета следующий:
LogisticRegression cost time=53.516026s
LogisticRegression log_loss=2.579390
(3) Случайный лес
обучающий набор данных
количество выборочных подмножеств
Выход: окончательный сильный классификатор
(1 пара
(a) Случайным образом извлеките m точек выборки из исходной выборки, чтобы получить обучающую выборку.
(б) Используйте обучающий набор для обучения дерева решений CART. Здесь в процессе обучения правило сегментации для каждого узла состоит в том, чтобы случайным образом выбрать k функций из всех функций, а затем выбрать из k функций. Оптимальная точка разделения разделить левое и правое поддеревья.
(2) Если это алгоритм классификации, то последней прогнозируемой категорией является категория с наибольшим количеством голосов среди конечных узлов, к которым направляется точка выборки; если это алгоритм регрессии, то конечной категорией является среднее число конечных узлов до куда идет точка выборки.
Код реализован следующим образом:
from sklearn.ensemble import RandomForestClassifier
params = [17,18,19] # 通过循环结构跑不同的随机森林树深度
for par in params:
clf = RandomForestClassifier(n_estimators=300, max_depth=par)
clf.fit(X_train,y_train)
predicted = np.array(clf.predict_proba(X_test))
print("depths_RandomForestClassifier log_loss=%f" %(log_loss(y_test, predicted))
depths_RandomForestClassifier log_loss=2.561306
depths_RandomForestClassifier log_loss=2.559973
depths_RandomForestClassifier log_loss=2.559018
В-четвертых, сводка библиотеки вызовов и быстрая проверка
NumPy
(Числовой Python) — это библиотека расширений языка Python, которая поддерживает большое количество операций с размерными массивами и матрицами, а также предоставляет большое количество библиотек математических функций для операций с массивами.
import numpy as np
Matplotlib
Matplotlib — это библиотека для построения графиков для Python. Он работает с NumPy, предоставляя эффективную альтернативу MatLab с открытым исходным кодом. Его также можно использовать с графическими инструментами, такими как PyQt и wxPython.
import matplotlib.pyplot as plt
Pandas
pandas — это инструмент на основе numpy, созданный для решения задач анализа данных. Pandas включает в себя большое количество библиотек и некоторые стандартные модели данных, предоставляя инструменты, необходимые для эффективной работы с большими наборами данных.
import pandas as pd
Seaborn
Seaborn — это пакет Python для визуализации графиков, основанный на matplotlib. Он предоставляет очень интерактивный интерфейс, который позволяет пользователям создавать различные привлекательные статистические диаграммы. На основе matplotlib осуществляется инкапсуляция API более высокого уровня.
import seaborn as sns
String
import string — ввести строковый модуль, чтобы мы могли вызывать функции, связанные со строковыми операциями.
import string
Matplotlib.colors
Процесс ретуши изображения
import matplotlib.colors as colors
Time
Рассчитать время расчета модели
import time
Preprocessing
Предварительно обработанные данные
from sklearn import preprocessing
Sklearn.preprocessing
Маркировка данных
from sklearn.preprocessing import LabelEncoder #用于Label编码
from sklearn.preprocessing import OneHotEncoder #用于one-hot编码
Sklearn.model_selection
Разделить набор данных
from sklearn.model_selection import train_test_split
Sklearn.naive_bayes
Импортируйте наивные байесовские модели
from sklearn.naive_bayes import BernoulliNB
Sklearn.linear_model
Импорт алгоритма линейной регрессии
from sklearn.linear_model import LogisticRegression
Sklearn.ensemble
Импорт модели случайного леса Интегрированные идеи обучения
from sklearn.ensemble import RandomForestClassifier
Sklearn.metrics
Функции проверки и оценки влияния модели
from sklearn.metrics import log_loss
Sklearn
Это очень мощная библиотека на питоне, например, при импорте модели можно сохранить много кода модели и напрямую закинуть в эту модель наши параметры. Например: NB.fit(X_train, y_train) может одновременно реализовать процесс подбора модели для разделения набора данных и разделения метки обучения в наборе для обучения.
V. Резюме
Как следует из названия, Pure Meng новое введение машинного обучения с нуля. Начните изучать машинное обучение с нуля в октябре, а время на изучение этой проблемы — один месяц. В этом месяце я надолго застрял на ранней стадии, научился устанавливать различные необходимые библиотеки python с помощью командной строки cmd, последний процесс был немного быстрее. На протяжении всего процесса анализ данных (прогнозирование тренда, анализ веса, возможное удаление и очистка данных и т. д.) может использоваться для выбора подходящих функций для обучения модели и реализации прогнозирования неполных данных. На самом деле эта модель не очень хороша, и точность может быть улучшена в слишком многих местах.Например, при разделении функций функции могут быть уточнены в соответствии с количеством различных временных интервалов, а разработка функций может достичь более высокая точность и уменьшить значение логарифмических потерь. В общем, весь процесс обработки не идеален, и обязательно будет много лазеек и возможностей для улучшения.Этот опыт можно рассматривать как новую возможность обучения для себя, поэтому давайте накапливать опыт с нуля.