import
pandas as pd
import
numpy as np
from
sklearn.model_selection
import
train_test_split
from
scipy.stats
import
mode
from
sklearn.neighbors
import
RadiusNeighborsClassifier
class
Radius_Nearest_Neighbors_Classifier() :
def
__init__(
self
, r ) :
self
.r
=
r
def
fit(
self
, X_train, Y_train ) :
self
.X_train
=
X_train
self
.Y_train
=
Y_train
self
.m,
self
.n
=
X_train.shape
def
predict(
self
, X_test ) :
self
.X_test
=
X_test
self
.m_test,
self
.n
=
X_test.shape
Y_predict
=
np.zeros(
self
.m_test )
for
i
in
range
(
self
.m_test ) :
x
=
self
.X_test[i]
neighbors
=
self
.find_neighbors( x )
Y_predict[i]
=
mode( neighbors )[
0
][
0
]
return
Y_predict
def
find_neighbors(
self
, x ) :
inside
=
[]
for
i
in
range
(
self
.m ) :
d
=
self
.euclidean( x,
self
.X_train[i] )
if
d <
=
self
.r :
inside.append(
self
.Y_train[i] )
inside_array
=
np.array( inside )
return
inside_array
def
euclidean(
self
, x, x_train ) :
return
np.sqrt( np.
sum
( np.square( x
-
x_train ) ) )
def
main() :
df
=
pd.read_csv(
"diabetes.csv"
)
X
=
df.iloc[:,:
-
1
].values
Y
=
df.iloc[:,
-
1
:].values
X_train, X_test, Y_train, Y_test
=
train_test_split(
X, Y, test_size
=
1
/
3
, random_state
=
0
)
model
=
Radius_Nearest_Neighbors_Classifier( r
=
550
)
model.fit( X_train, Y_train )
model1
=
RadiusNeighborsClassifier( radius
=
550
)
model1.fit( X_train, Y_train )
Y_pred
=
model.predict( X_test )
Y_pred1
=
model1.predict( X_test )
correctly_classified
=
0
correctly_classified1
=
0
count
=
0
for
count
in
range
( np.size( Y_pred ) ) :
if
Y_test[count]
=
=
Y_pred[count] :
correctly_classified
=
correctly_classified
+
1
if
Y_test[count]
=
=
Y_pred1[count] :
correctly_classified1
=
correctly_classified1
+
1
count
=
count
+
1
print
(
"Accuracy on test set by our model : "
, (
correctly_classified
/
count )
*
100
)
print
(
"Accuracy on test set by sklearn model : "
, (
correctly_classified
/
count )
*
100
)
if
__name__
=
=
"__main__"
:
main()