Example #1
0
# Линейные методы классификации
# Метод опорных векторов

import pandas
from sklearn.svm import SVC

from source import create_answer_file

data_train = pandas.read_csv(r'..\data\svm.csv', names=['result', 'p1', 'p2'])

y_train = data_train['result']
X_train = data_train[['p1', 'p2']]

svc = SVC(C=100000, kernel='linear', random_state=241)
fit = svc.fit(X_train, y_train)
result = ' '.join(str(f) for f in (fit.support_ + 1))

create_answer_file('w3_1.txt', f'{result}')
Example #2
0
from sklearn.decomposition import PCA

from source import create_answer_file

train_data = pandas.read_csv(r'..\data\close_prices.csv')
train_data_2 = pandas.read_csv(r'..\data\djia_index.csv')
del train_data['date']

# Метод главных компонент
pca = PCA(n_components=10)
pca.fit(train_data)

# определение кол-ва компонентов, чтобы объяснить 90% дисперсии
ratio_sum = 0
count = 0
for index, val in enumerate(pca.explained_variance_ratio_):
    ratio_sum += val
    if ratio_sum >= 0.90:
        count = index + 1
        break

x = pca.transform(train_data)

# получение коэфф. Пирсона
coeff = np.corrcoef(x[:, 0], train_data_2['^DJI'])[0, 1]
company_name = train_data.columns[np.argmax(pca.components_[0])]

create_answer_file('w4_2.txt', f'{count}')
create_answer_file('w4_3.txt', f'{coeff}')
create_answer_file('w4_4.txt', f'{company_name}')
Example #3
0
# метрика PSNR
psnr = lambda image1, image2: 10 * np.log10(1 / (np.mean(
    (image1 - image2)**2)))

# нахождение минимального количество кластеров, при котором значение PSNR выше 20
# (можно рассмотреть не более 20 кластеров)
for n_clusters in range(1, 21):
    pixels = rgb_matrix.copy()
    model = KMeans(n_clusters=n_clusters, init='k-means++', random_state=241)
    pixels['cluster'] = model.fit_predict(pixels)

    # пиксели, отнесенные в один кластер, заполняются средним цветом по кластеру
    means = pixels.groupby('cluster').mean().values
    mean_image = np.reshape([means[c] for c in pixels['cluster'].values],
                            (w, h, d))
    imsave('../images/parrots_means_' + str(n_clusters) + '.jpg', mean_image)

    # пиксели, отнесенные в один кластер, заполняются медианным цветом по кластеру
    medians = pixels.groupby('cluster').median().values
    median_image = np.reshape([medians[c] for c in pixels['cluster'].values],
                              (w, h, d))
    imsave('../images/parrots_medians_' + str(n_clusters) + '.jpg',
           median_image)

    psnr_mean, psnr_median = psnr(image, mean_image), psnr(image, median_image)

    if psnr_mean > 20 or psnr_median > 20:
        create_answer_file('w6_1.txt', str(n_clusters))
        break
Example #4
0
data = pandas.read_csv(r'..\data\gbm-data.csv')
X = data.loc[:, 'D1':'D1776'].values
y = data['Activity'].values
X_train, X_test, y_train, y_test = train_test_split(X,
                                                    y,
                                                    test_size=0.8,
                                                    random_state=241)

min_loss_results = {
    learning_rate: model_test(learning_rate)
    for learning_rate in [1, 0.5, 0.3, 0.2, 0.1]
}

# переобучение (overfitting) или недообучение (underfitting) - определяется по графикам
create_answer_file('w5_2.txt', 'overfitting')

# минимальное значение log-loss и номер итерации,
# на котором оно достигается, при learning_rate = 0.2.
min_loss_value, min_loss_index = min_loss_results[0.2]
create_answer_file('w5_3.txt', '{:0.2f} {}'.format(min_loss_value,
                                                   min_loss_index))

# RandomForestClassifier с количеством деревьев, равным количеству итераций, на котором
# достигается наилучшее качество у градиентного бустинга
model = RandomForestClassifier(n_estimators=min_loss_index, random_state=241)
model.fit(X_train, y_train)

test_loss = log_loss(y_test, model.predict_proba(X_test)[:, 1])
create_answer_file('w5_4.txt', f'{test_loss}')
Example #5
0
                             names=['result', 'p1', 'p2'])
data_test = pandas.read_csv(r'..\data\perceptron-test.csv',
                            names=['result', 'p1', 'p2'])

y_train = data_train['result']
X_train = data_train[['p1', 'p2']]

y_test = data_test['result']
X_test = data_test[['p1', 'p2']]

clf_train = Perceptron(random_state=241)

# обучение персептрона
clf_train.fit(X_train, y_train)
predictions_train = clf_train.predict(X_test)
# определение качества предсказания перцептрона
acc_score_train = accuracy_score(y_test, predictions_train)

# стандартизация признаков
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# обучение персептрона после стандартизации признаков
clf_test = Perceptron(random_state=241)
clf_test.fit(X_train_scaled, y_train)
predictions_test = clf_test.predict(X_test_scaled)
acc_score_test = accuracy_score(y_test, predictions_test)

create_answer_file('w2_6.txt', f'{round(acc_score_test - acc_score_train, 3)}')
Example #6
0
def get_max_accuracy(precision_data):
    accuracy = precision_data[0]
    recall = precision_data[1]
    result = [a for r, a in zip(recall, accuracy) if r >= 0.7]
    return max(result)


data = pandas.read_csv(r'..\data\classification.csv')

# выборка из данных по условию и подсчёт
TP = len(data.loc[(data['true'] == 1) & (data['pred'] == 1)])
FP = len(data.loc[(data['true'] == 0) & (data['pred'] == 1)])
FN = len(data.loc[(data['true'] == 1) & (data['pred'] == 0)])
TN = len(data.loc[(data['true'] == 0) & (data['pred'] == 0)])
create_answer_file('w3_4.txt', f'{TP} {FP} {FN} {TN}')

# доля правильных ответов
accuracy_score = round(mt.accuracy_score(data['true'], data['pred']), 3)

# точность
precision_score = round(mt.precision_score(data['true'], data['pred']), 3)

# полнота
recall_score = round(mt.recall_score(data['true'], data['pred']), 3)

# F-мера
f1_score = round(mt.f1_score(data['true'], data['pred']), 3)

create_answer_file(
    'w3_5.txt',
Example #7
0
    # градиентный спуск
    while distance > 1e-05 and i < 10000:
        sum_1 = sum_2 = 0
        old_w1 = w1
        old_w2 = w2

        for i in range(y_len):
            a = 1 - (1 / (1 + np.exp(-y[i] *
                                     (w1 * X['p1'][i] + w2 * X['p2'][i]))))
            sum_1 = sum_1 + y[i] * X['p1'][i] * a
            sum_2 = sum_2 + y[i] * X['p2'][i] * a

        w1 = w1 + k / y_len * sum_1 - k * C * w1
        w2 = w2 + k / y_len * sum_2 - k * C * w2
        distance = get_distance(old_w1, w1, old_w2, w2)
        i += 1

    return round(
        roc_auc_score(y, 1 / (1 + np.exp(-w1 * X['p1'] - w2 * X['p2']))), 3)


data = pandas.read_csv(r'..\data\data-logistic.csv',
                       names=['result', 'p1', 'p2'])
y = data['result']
X = data[['p1', 'p2']]

result_1 = get_roc_auc_score(X, y, 0)
result_2 = get_roc_auc_score(X, y, 10)

create_answer_file('w3_3.txt', f'{result_1} {result_2}')
Example #8
0
# Композиция алгоритмов
# Случайный лес
# Регрессия

import pandas
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import KFold, cross_val_score

from source import create_answer_file

data = pandas.read_csv(r'..\data\abalone.csv')

# приводим поле к числовому виду
data['Sex'] = data['Sex'].map(lambda x: 1
                              if x == 'M' else (-1 if x == 'F' else 0))

X = data[[col for col in data.columns if col != 'Rings']]
y = data['Rings']

for estimators_count in range(1, 51):
    clf = RandomForestRegressor(n_estimators=estimators_count, random_state=1)
    clf.fit(X, y)
    k_fold = KFold(n_splits=5, shuffle=True, random_state=1)
    scores = cross_val_score(clf, X, y, cv=k_fold, scoring='r2')

    if scores.mean() > 0.52:
        create_answer_file('w5_1.txt', f'{estimators_count}')
        break
Example #9
0
        means.append(scores.mean())

    return means


data = pandas.read_csv(r'..\data\wine.data',
                       names=[
                           'sort', 'Alcohol', 'acid', 'Ash', 'Alcalinity',
                           'Magnesium', 'phenols', 'Flavanoids',
                           'Nonflavanoid', 'Proanthocyanins', 'intensity',
                           'Hue', 'diluted', 'Proline'
                       ])
y = data['sort']
X = data[[
    'Alcohol', 'acid', 'Ash', 'Alcalinity', 'Magnesium', 'phenols',
    'Flavanoids', 'Nonflavanoid', 'Proanthocyanins', 'intensity', 'Hue',
    'diluted', 'Proline'
]]

result = get_means(X, y)
max_mean = max(result)
create_answer_file('w2_1.txt', f'{result.index(max_mean) + 1}')
create_answer_file('w2_2.txt', f'{max_mean}')

# с маштабированием
X_scale = scale(X)
result_scale = get_means(X_scale, y)
max_mean_scale = max(result_scale)
create_answer_file('w2_3.txt', f'{result_scale.index(max_mean_scale) + 1}')
create_answer_file('w2_4.txt', f'{max_mean_scale}')
Example #10
0
label = LabelEncoder()
dicts = {}
# задаем список значений для кодирования
label.fit(data.Sex.drop_duplicates())
dicts['Sex'] = list(label.classes_)
# заменяем значения из списка кодами закодированных элементов
data.Sex = label.transform(data.Sex)

# получение столбцов - признаков
props_columns = ['Pclass', 'Fare', 'Age', 'Sex']
x = data[props_columns]

# замена null-значения на 0
x = x.fillna(0)

# получение столбца результатов
result_column = ['Survived']
y = data[result_column]

# построение решающего дерева и обучение
tree = DecisionTreeClassifier(random_state=241)
tree.fit(x, y)

# получение важности каждого из столбцов
feature_importances = list(tree.feature_importances_)

# 2 столбца, влияющие больше всего на итоговый результат
ind1, ind2 = tree.feature_importances_.argsort()[-2:]

create_answer_file('w1_7.txt', f'{props_columns[ind1]} {props_columns[ind2]}')
Example #11
0
train_data['LocationNormalized'] = handle(train_data['LocationNormalized'])
train_data['ContractTime'] = handle(train_data['ContractTime'])

# числовое представление слов методом TF-IDF
vector = TfidfVectorizer(min_df=5)
x_train_vector = vector.fit_transform(train_data['FullDescription'])
x_test_vector = vector.transform(test_data['FullDescription'])

# замена пропущенных значений на специальные строковые величины('nan')
train_data['LocationNormalized'].fillna('nan', inplace=True)
train_data['ContractTime'].fillna('nan', inplace=True)

# признаки LocationNormalized и ContractTime являются строковыми,
# и поэтому с ними нельзя работать напрямую - используем DictVectorizer
enc = DictVectorizer()
X_train_categ = enc.fit_transform(
    train_data[['LocationNormalized', 'ContractTime']].to_dict('records'))
X_test_categ = enc.transform(test_data[['LocationNormalized',
                                        'ContractTime']].to_dict('records'))

# объединение данных
X_train = hstack([x_train_vector, X_train_categ])
X_test = hstack([x_test_vector, X_test_categ])

# обучение модели
clf = Ridge(alpha=1, random_state=241)
clf.fit(X_train, train_data['SalaryNormalized'])
# определение SalaryNormalized для тестовых данных
result = clf.predict(X_test)
create_answer_file('w4_1.txt', f'{round(result[0],2)} {round(result[1],2)}')
Example #12
0
from sklearn.neighbors import KNeighborsRegressor
from sklearn.preprocessing import scale

from source import create_answer_file

boston_data = load_boston()
X = boston_data.data
y = boston_data.target

# с маштабированием
X_scale = scale(X)
result_scale = []
result_p = []
for p in np.linspace(1, 10, num=200):
    # определили классификатор
    clf = KNeighborsRegressor(n_neighbors=5, weights='distance', p=p)
    # определили разбиение
    k_fold = KFold(n_splits=5, shuffle=True, random_state=42)
    # проверяем как хорошо для каждого разбиения происходят предсказания
    scores_scale = cross_val_score(clf,
                                   X_scale,
                                   y,
                                   cv=k_fold,
                                   scoring='mean_squared_error')
    result_scale.append(scores_scale.mean())
    result_p.append(p)

max_mean_scale = max(result_scale)
create_answer_file('w2_5.txt',
                   f'{result_p[result_scale.index(max_mean_scale)]}')