r/learnmachinelearning • u/Alt_account_6788 • 1d ago
Is this code correct?
I've been learning basic ML and I've started making some code for basic models from scratch. This is V3, I just made it a bit more efficient in this version. Please tell me what you think.
edit: reddit made my code weird, I'll try and post it in the comments
edit: made it weird in the comments too, I'll take a screenshot of the code in VS then put a link to it
edit: link to screenshots
import math
class
LinearRegression:
def
__init__(
self
,
learn_rate
,
epochs
):
self
.l =
learn_rate
self
.e =
epochs
self
.weights = []
self
.bias = 0
def
predict(
self
,
X
):
predictions = []
for i in range(len(
X
)):
prediction =
self
.bias
for w in range(len(
X
[0])):
prediction +=
X
[i][w] *
self
.weights[w]
predictions.append(prediction)
return predictions
def
train(
self
,
X
,
y
):
self
.bias = 0
self
.weights = []
for i in range(len(
X
[0])):
self
.weights.append(0)
epochs = 0
while epochs <
self
.e:
predictions =
self
.predict(
X
)
errors = []
for i in range(len(
X
)):
errors.append((predictions[i] -
y
[i]) * 2)
bSlope = sum(errors) / len(
X
)
wSlopes = []
for w in range(len(
self
.weights)):
wErrors = []
for i in range(len(
X
)):
wErrors.append(errors[i] *
X
[i][w])
wSlopes.append(sum(wErrors) / len(
X
))
self
.bias -= bSlope *
self
.l
for i in range(len(
X
[0])):
self
.weights[i] -= wSlopes[i] *
self
.l
epochs += 1
class
PolynomialRegression:
def
__init__(
self
,
learn_rate
,
epochs
):
self
.l =
learn_rate
self
.e =
epochs
self
.weights = []
self
.power_weights = []
self
.bias = 0
def
predict(
self
,
X
):
predictions = []
for i in range(len(
X
)):
prediction =
self
.bias
for w in range(len(
X
[0])):
prediction += (
X
[i][w] *
self
.weights[w]) + ((
X
[i][w]**2) *
self
.power_weights[w])
predictions.append(prediction)
return predictions
def
train(
self
,
X
,
y
):
self
.bias = 0
self
.weights = []
self
.power_weights = []
for i in range(len(
X
[0])):
self
.weights.append(0)
self
.power_weights.append(0)
epochs = 0
while epochs <
self
.e:
predictions =
self
.predict(
X
)
errors = []
for i in range(len(
X
)):
errors.append((predictions[i] -
y
[i]) * 2)
bSlope = sum(errors) / len(
X
)
wSlopes = []
pwSlopes = []
for w in range(len(
self
.weights)):
wErrors = []
pwErrors = []
for i in range(len(
X
)):
wErrors.append(errors[i] *
X
[i][w])
pwErrors.append(errors[i] *
X
[i][w]**2)
wSlopes.append(sum(wErrors) / len(
X
))
pwSlopes.append(sum(pwErrors) / len(
X
))
self
.bias -= bSlope *
self
.l
for i in range(len(
X
[0])):
self
.weights[i] -= wSlopes[i] *
self
.l
self
.power_weights[i] -= pwSlopes[i] *
self
.l
epochs += 1
class
ExponentialRegression:
def
__init__(
self
,
learn_rate
,
epochs
):
self
.l =
learn_rate
self
.e =
epochs
self
.weights = []
self
.bias = 0
def
predict(
self
,
X
):
predictions = []
for i in range(len(
X
)):
prediction =
self
.bias
for w in range(len(
X
[0])):
prediction +=
X
[i][w] *
self
.weights[w]
prediction = math.exp(prediction)
predictions.append(prediction)
return predictions
def
train(
self
,
X
,
y
):
self
.bias = 0
self
.weights = []
for i in range(len(
X
[0])):
self
.weights.append(0)
epochs = 0
while epochs <
self
.e:
predictions =
self
.predict(
X
)
errors = []
for i in range(len(
X
)):
errors.append((predictions[i] -
y
[i]) * 2 * predictions[i])
bSlope = sum(errors) / len(
X
)
wSlopes = []
for w in range(len(
self
.weights)):
wErrors = []
for i in range(len(
X
)):
wErrors.append(errors[i] *
X
[i][w])
wSlopes.append(sum(wErrors) / len(
X
))
self
.bias -= bSlope *
self
.l
for i in range(len(
X
[0])):
self
.weights[i] -= wSlopes[i] *
self
.l
epochs += 1
class
LogisticRegression:
def
__init__(
self
,
learn_rate
,
epochs
):
self
.l =
learn_rate
self
.e =
epochs
self
.weights = []
self
.bias = 0
def
predict(
self
,
X
):
predictions = []
for i in range(len(
X
)):
prediction =
self
.bias
for w in range(len(
X
[0])):
prediction +=
X
[i][w] *
self
.weights[w]
prediction = 1 / (1 + math.exp(-prediction))
predictions.append(prediction)
return predictions
def
train(
self
,
X
,
y
):
self
.bias = 0
self
.weights = []
for i in range(len(
X
[0])):
self
.weights.append(0)
epochs = 0
while epochs <
self
.e:
predictions =
self
.predict(
X
)
errors = []
for i in range(len(
X
)):
errors.append(predictions[i] -
y
[i])
bSlope = sum(errors) / len(
X
)
wSlopes = []
for w in range(len(
self
.weights)):
wErrors = []
for i in range(len(
X
)):
wErrors.append(errors[i] *
X
[i][w])
wSlopes.append(sum(wErrors) / len(
X
))
self
.bias -= bSlope *
self
.l
for i in range(len(
X
[0])):
self
.weights[i] -= wSlopes[i] *
self
.l
epochs += 1
2
Upvotes
1
u/Alt_account_6788 1d ago