Archived
1
0

Refactoring/optimisations +tesing on Iris

This commit is contained in:
VerySweetBread
2022-11-24 17:07:41 +03:00
parent ca4b9e332c
commit e0aa37aabd
52 changed files with 27 additions and 12 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+11 -7
View File
@@ -7,8 +7,8 @@ var petal_length_max = 0.0
var petal_width_max = 0.0
fun main() {
val file = File("/run/media/sweetbread/50AF29954CE66E9F/Coding/Kotlin/AI/src/main/resources/IRIS.csv")
val data: List<Iris> = csvReader().readAll(file).drop(1).map { Iris(it[0].toDouble(), it[1].toDouble(), it[2].toDouble(), it[3].toDouble(), it[4]) } .shuffled()
val file = File("src/main/resources/Iris.csv")
val data: List<Iris> = csvReader().readAll(file).drop(1).map { Iris(it[1].toDouble(), it[2].toDouble(), it[3].toDouble(), it[4].toDouble(), it[5]) } .shuffled()
data.forEach {
if (it.sepal_length > sepal_length_max) sepal_length_max = it.sepal_length
if (it.sepal_width > sepal_width_max) sepal_width_max = it.sepal_width
@@ -20,13 +20,17 @@ fun main() {
Layer(4),
Layer(4),
Layer(3, false)
))
), .2)
println(model.output())
model.teach(data.subList(0, 50).map { it.data_field() }.toTypedArray(), 100, false)
data[100].data_field()[1].forEach { print(it.toInt()); print(" ") }
println()
model.input(data[100].data_field()[0]); println(model.output())
model.teach(data.subList(0, 50).map { it.data_field() }.toTypedArray(), 200, false)
var errors = 0
data.forEach {
val cor = it.data_field()[1].map{ it.toInt() }; model.input(it.data_field()[0])
println("Correct: $cor, out: ${model.output_int()}, ${cor==model.output_int()}")
if (cor!=model.output_int()) errors++
}
println((errors.toDouble()/data.size*100).toInt().toString()+"%")
}
class Iris (
+16 -5
View File
@@ -2,8 +2,13 @@ import kotlin.math.pow
import kotlin.properties.Delegates
class Perceptron (private val layers: Array<Layer>, private val k: Double = 0.5) {
val input_layer: Layer
val output_layer: Layer
init {
input_layer = layers.first()
output_layer = layers.last()
layers.mapIndexed { index, layer -> layer.position = index }
for (i in 0..layers.size-2) {
println(i)
@@ -12,17 +17,17 @@ class Perceptron (private val layers: Array<Layer>, private val k: Double = 0.5)
this.count()
}
private fun count() { for (layer in layers) { layer.count() } }
private fun count() { layers.forEach { it.count() }}
fun input(array: Array<Double>) {
for (index in 0 until layers[0].nodes.dropLast(1).size) {
layers[0].nodes[index].valuE = array[index]
input_layer.nodes.mapIndexed { index, node ->
if (node !is Bias) node.valuE = array[index]
}
this.count()
}
private fun backPropagation(input: Array<Double>) {
input.mapIndexed { i, v -> layers.last().nodes[i].error = v - layers.last().nodes[i].valuE }
output_layer.nodes.mapIndexed { index, node -> node.error = input[index] - node.valuE }
for (layer in layers.drop(1).dropLast(1).reversed()) {
for (node in layer.nodes) {
node.error = 0.toDouble()
@@ -57,6 +62,12 @@ class Perceptron (private val layers: Array<Layer>, private val k: Double = 0.5)
for (node in layers.last().nodes) { output += node.valuE }
return output
}
fun output_int(): List<Int> {
var output = listOf<Int>()
for (node in layers.last().nodes) { output += if (node.valuE > 0.5) 1 else 0 }
return output
}
}
open class Node(val parent: Layer, private val position: Int) {
@@ -88,7 +99,7 @@ class Bias(parent: Layer, position: Int) : Node(parent, position) {
override fun getValue() = 1.toDouble()
}
class Layer(amount: Int, bias: Boolean = true) {
open class Layer(amount: Int, bias: Boolean = true) {
var position by Delegates.notNull<Int>()
var nodes = listOf<Node>()
var nextWeight: Weight? = null