Глава 3
3.1 Прогнозирование веса овчарки методом линейной регрессии
3.1.1 Ввод данных
train_x = [ 27 , 29 , 34 , 40 , 42 , 47 , 48 , 49 , 50 , 52 , 52 , 52 , 54 ]
train_y = [ 6 , 7.5 , 9 , 10.7 , 12.8 , 15.1 , 16 , 18.5 , 19.4 , 18.4 , 19.7 , 21.8 , 21.7 ]
print_shape( train_x)
print_shape( train_y)
3.1.2 Определение модели линейной регрессии
model = linear_regressor( )
3.1.3 Обучение модели линейной регрессии
model. train( train_x, train_y)
3.1.4 Визуализация модели
model. show( )
3.1.5 Предсказание модели — функция предсказания()
x = 40
pred_y = model. predict( x)
print ( pred_y)
3.1.6 Параметры в модели
weights = model. get_weights( )
print ( weights)
k = weights[ 0 ]
b = weights[ 1 ]
print ( "k=" , k)
print ( "b=" , b)
3.1.7 Определение линейной функции
def linear_function ( x, k, b) :
y = k * x + b
return y
3.1.8 Прогнозирование с использованием линейных функций
x = 40
pred_y = linear_function( x, k, b)
print ( pred_y)
3.1.9 Анализ модели — влияние подбора данных с выбросами и результатов
train_y[ 5 ] = 30
model = linear_regressor( )
model. train( train_x, train_y)
model. show( )
3.2 Прогнозирование веса овчарки методом полиномиальной регрессии
3.2.1 Ввод данных
train_x = [ 27 , 29 , 34 , 40 , 42 , 47 , 48 , 49 , 50 , 52 , 52 , 52 , 54 ]
train_y = [ 6 , 7.5 , 9 , 10.7 , 12.8 , 15.1 , 16 , 18.5 , 19.4 , 18.4 , 19.7 , 21.8 , 21.7 ]
3.2.2 Определение модели полиномиальной регрессии
model = poly_regressor( 2 )
3.2.3 Обучение модели полиномиальной регрессии
model. train( train_x, train_y)
3.2.4 Визуализация модели
model. show( )
3.2.5 Прогнозирование модели
x = 40
pred_y = model. predict( x)
print ( pred_y)
3.2.6 Влияние количества моделей на эффект подгонки
model = poly_regressor( 3 )
model. train( train_x, train_y)
model. show( )
model = poly_regressor( 10 )
model. train( train_x, train_y)
model. show( )
model = poly_regressor( 30 )
model. train( train_x, train_y)
model. show( )
3.2.7 Влияние аномальных данных на эффект подгонки
train_y[ 5 ] = 30
model = poly_regressor( 2 )
model. train( train_x, train_y)
model. show( )
model = poly_regressor( 30 )
model. train( train_x, train_y)
model. show( )
3.3 Оценка модели линейной регрессии и тестовый набор
3.3.1 Обучение линейной модели
train_x = [ 27 , 29 , 34 , 40 , 42 , 47 , 48 , 49 , 50 , 52 , 52 , 52 , 54 ]
train_y = [ 6 , 7.5 , 9 , 10.7 , 12.8 , 15.1 , 16 , 18.5 , 19.4 , 18.4 , 19.7 , 21.8 , 21.7 ]
model = linear_regressor( )
model. train( train_x, train_y)
model. show( )
3.3.2 Определение функции ошибки
def mse_error ( pred, y) :
error = 0
for i in range ( len ( pred) ) :
error = error + ( y[ i] - pred[ i] ) ** 2
error = error / len ( pred)
return error
print ( mse_error( train_x, train_y) )
3.3.3 Расчет погрешности подбора
pred_y = model. predict( train_x)
error = mse_error( pred_y, train_y)
print ( error)
3.3.4 Запишите процесс вычисления ошибки в функцию
def compute_error ( model, x, y) :
pred = model. predict( x)
error = mse_error( pred, y)
return error
3.3.5 Сравнение моделей
model2 = poly_regressor( 3 )
model2. train( train_x, train_y)
model2. show( )
print ( compute_error( model2, train_x, train_y) )
model3 = poly_regressor( 30 )
model3. train( train_x, train_y)
model3. show( )
print ( compute_error( model3, train_x, train_y) )
3.3.6 Обучающий набор, тестовый набор и проблема переобучения
test_x = [ 23 , 31 , 32 , 38 , 40 , 45 , 49 , 50 , 50 , 51 , 51 , 53 , 55 ]
test_y = [ 6.3 , 7.2 , 9.1 , 10.5 , 12.9 , 15.5 , 15.9 , 18.3 , 19.7 , 18.9 , 19.3 , 21.3 , 22.1 ]
print ( "线性回归误差:" , compute_error( model, test_x, test_y) )
print ( "3次多项式误差:" , compute_error( model2, test_x, test_y) )
print ( "30次多项式误差:" , compute_error( model3, test_x, test_y) )
3.4 Производительность предсказания линейной классификации
3.4.1 Чтение данных
train_x = [ 60 , 56 , 60 , 55 , 60 , 57 , 65 , 60 , 62 , 59 , 43 , 52 , 41 , 45 , 43 , 50 , 46 , 52 , 56 , 56 ]
train_y = [ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ]
3.4.2 Определение модели линейной классификации
model = linear_classifier( )
3.4.3 Обучение модели линейной классификации
model. train( train_x, train_y)
3.4.4 Визуализация модели
model. show( )
3.4.5 Модельное приложение — функция предсказания()
x = 60
pred_y = model. predict( x)
print ( pred_y)
3.4.6 Параметры в модели
weights = model. get_weights( )
print ( weights)
k = weights[ 0 ]
b = weights[ 1 ]
print ( "k=" , k)
print ( "b=" , b)
3.4.7 Определение функции линейной классификации
def decision_function ( x, k, b) :
if k * x + b > 0 :
return 1
else :
return - 1
pred = decision_function( 3 , 2 , - 5.5 )
print ( pred)
pred = decision_function( 3 , 2 , - 6.5 )
print ( pred)
3.4.8 Прогнозирование с использованием функций линейной классификации
k, b = model. get_weights( )
x = 60
pred_y = decision_function( x, k, b)
print ( pred_y)
3.4.9 Расчет точности
def accuracy ( pred, y) :
right = 0
total = 0
for i in range ( len ( pred) ) :
if pred[ i] == y[ i] :
right += 1
total += 1
acc = right / total
return acc
pred_y = model. predict( train_x)
acc = accuracy( pred_y, train_y)
print ( acc)
3.4.10 Сравнение линейной классификации и линейной регрессии
model2 = linear_regressor( )
model2. train( train_x, train_y)
model2. show( )
3.5 Использование роста и веса для предсказания пола
3.5.1 Чтение данных
train_x_m = [ [ 163 , 60 ] , [ 164 , 56 ] , [ 165 , 60 ] , [ 168 , 55 ] , [ 169 , 60 ] , [ 170 , 57 ] , [ 170 , 65 ] , [ 171 , 60 ] , [ 170 , 62 ] , [ 169 , 59 ] , [ 153 , 43 ] , [ 158 , 52 ] , [ 156 , 41 ] , [ 158 , 45 ] , [ 159 , 43 ] , [ 160 , 50 ] , [ 159 , 46 ] , [ 158 , 52 ] , [ 157 , 56 ] , [ 158 , 55 ] , [ 167 , 53 ] , [ 168 , 52 ] , [ 163 , 65 ] , [ 171 , 52 ] , [ 169 , 52 ] , [ 170 , 57 ] , [ 170 , 60 ] , [ 168 , 52 ] , [ 166 , 60 ] , [ 165 , 51 ] , [ 153 , 43 ] , [ 158 , 55 ] , [ 156 , 41 ] , [ 156 , 57 ] , [ 159 , 43 ] , [ 163 , 41 ] , [ 162 , 56 ] , [ 155 , 52 ] , [ 152 , 56 ] , [ 153 , 55 ] ]
train_x_s = [ 60 , 56 , 60 , 55 , 60 , 57 , 65 , 60 , 62 , 59 , 43 , 52 , 41 , 45 , 43 , 50 , 46 , 52 , 56 , 55 , 53 , 52 , 65 , 52 , 52 , 57 , 60 , 52 , 60 , 51 , 43 , 55 , 41 , 57 , 43 , 41 , 56 , 52 , 56 , 55 ]
train_y = [ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ]
test_x_m = [ [ 166 , 58 ] , [ 162 , 56 ] , [ 178 , 66 ] , [ 153 , 50 ] , [ 140 , 60 ] , [ 160 , 55 ] ]
test_x_s = [ 58 , 56 , 66 , 50 , 60 , 55 ]
test_y = [ 1 , 1 , 1 , - 1 , - 1 , - 1 ]
3.5.2 Визуализация данных
visualize_data2D( train_x_s, train_y)
visualize_data3D( train_x_m, train_y)
3.5.3 Обучение и проверка многомерной классификации
model = linear_classifier( )
model. train( train_x_m, train_y)
pred_y = model. predict( test_x_m)
acc = accuracy( pred_y, test_y)
print ( acc)
3.5.4 Многомерные классификаторы и одномерные классификаторы
model2 = linear_classifier( )
model2. train( train_x_s, train_y)
red_y = model2. predict( test_x_s)
acc = accuracy( pred_y, test_y)
print ( acc)
3.6 Классификация цветков ириса с помощью персептронов
3.6.1 Загрузка базы данных
iris = data. get( 'iris-simple' )
3.6.2 Показать базу данных
fig( ) + plot( iris)
3.6.3 Создание классификатора
blc = binary_linear_classifier( )
3.6.4 Обучение классификатора
blc. train( iris, alg= Perceptron( ) )
3.6.5 Установка скорости обучения персептрона
blc1 = binary_linear_classifier( )
blc1. train( iris, alg= Perceptron( lr= 0.4 ) )
blc2 = binary_linear_classifier( )
blc2. train( iris, alg= Perceptron( lr= 0.05 ) )
blc3 = binary_linear_classifier( )
blc3. train( iris, alg= Perceptron( w= [ 1 , 1 ] , b= 1 ) )
3.6.6 Сравнение результатов обучения
fig( ) + plot( iris) + plot( blc) + plot( blc1) + plot( blc2)
3.7 Использование метода опорных векторов для завершения классификации радужной оболочки
3.7.1 Загрузка набора данных
iris= data. get( 'iris-simple' )
fig( ) + plot( iris)
3.7.2 Создание классификатора
blc = binary_linear_classifier( )
3.7.3 Обучение классификатора с помощью машин опорных векторов
blc. train( iris, alg= SVM( ) )
fig( ) + plot( iris) + plot( blc)
3.8 Проверка и применение классификатора
3.8.1 Загрузка набора данных
iris= data. get( 'iris-simple' )
fig( ) + plot( iris)
3.8.2 Сегментация данных
iris_train, iris_test = iris. split( 7 , 3 )
fig( ) + plot( iris_train)
3.8.3 Получить классификатор
blc1= binary_linear_classifier( )
blc2= binary_linear_classifier( )
blc1. train( iris_train, alg= Perceptron( lr= 0.2 ) )
blc2. train( iris_train, alg= SVM( ) )
fig( ) + plot( iris_train) + plot( blc1) + plot( blc2)
3.8.4 Тестирование классификатора
acc1 = blc1. accuracy( iris_test)
acc2 = blc2. accuracy( iris_test)
print ( 'Perceptron Accuracy:' , acc1)
print ( 'SVM Accuracy:' , acc2)
3.8.5 Применение классификатора
point = [ 2 , 0.7 ]
fig( ) + plot( iris) + plot( blc1) + plot( blc2) + plot( [ point] )
label1 = blc1. predict( point)
label2 = blc2. predict( point)
print ( 'Perceptron Prediction: ' , label1)
print ( 'SVM Prediction: ' , label2)
3.9 Понимание алгоритма К-средних
3.9.1 Получить набор данных
iris = data. get( 'iris' )
feature, label = iris[ 0 ]
print ( "Feature : " , feature)
3.9.2 Выбор характеристик набора данных
def select_features ( feature) :
return feature[ 2 : 4 ]
iris2 = iris. map ( select_features, on_field= 0 )
fig( ) + plot( iris2, type = 'scatter' )
3.9.3 Создание модели кластеризации K-средних
model = KMeans( K= 3 )
3.9.4 Обучение модели и наблюдение за эффектом обучения
def select_features(feature):
return feature[2:4]
iris2 = iris.map(select_features, on_field=0)
model.train(iris2.field(0))
fig() + plot(model, iris2, type='cluster_statistics')
3.9.5 Повторить и сравнить
model2 = KMeans( K= 3 )
model2. train( iris. field( 0 ) )
fig( ) + plot( model2, iris, type = 'cluster_statistics' )