def {method_name} (features)

	kernels = Array.new(@vectors.length)
	case @kernel
	when "LINEAR"
		for i in 0 ... @vectors.length
			kernel = 0
			for j in 0 ... @vectors[i].length
				kernel += @vectors[i][j] * features[j]
			end
			kernels[i] = kernel
		end
	when 'POLY'
		for i in 0 ... @vectors.length
			kernel = 0
			for j in 0 ... @vectors[i].length
				kernel += @vectors[i][j] * features[j]
			end
			kernels[i] = (((@gamma * kernel) + @coef0) ** @degree)
		end
	when "RBF"
		for i in 0 ... @vectors.length
			kernel = 0
			for j in 0 ... @vectors[i].length
				kernel += ((@vectors[i][j] - features[j]) ** 2)
			end
			kernels[i] = Math.exp(-@gamma * kernel)
		end
	when 'SIGMOID'
		for i in 0 ... @vectors.length
			kernel = 0
			for j in 0 ... @vectors[i].length
				kernel += @vectors[i][j] * features[j]
			end
			kernels[i] = Math.tanh((@gamma * kernel) + @coef0)
		end
	end

	starts = Array.new(@nRows, 0)
	for i in 0 ... @nRows
		if i != 0
			start = 0
			for j in 0 ... i
				start += @weights[j]
			end
			starts[i] = start
		else
			starts[0] = 0
		end
	end

	ends = Array.new(@nRows, 0)
	for i in 0 ... @nRows
		ends[i] = @weights[i] + starts[i]
	end

	if @nClasses == 2

		for i in 0 ... kernels.length
			kernels[i] = -kernels[i]
		end

		decision = 0
		for k in starts[1] ... ends[1]
			decision += kernels[k] * @coefficients[0][k]
		end
		for k in starts[0] ... ends[0]
			decision += kernels[k] * @coefficients[0][k]
		end
		decision += @intercepts[0];

		if decision > 0
			return 0
		end
		return 1

	end

	decisions = Array.new(@intercepts.length, 0)
	d = 0
	for i in 0 ... @nRows
		for j in i + 1 ... @nRows
			tmp = 0
			for k in starts[j] ... ends[j]
				tmp += @coefficients[i][k] * kernels[k]
			end
			for k in starts[i] ... ends[i]
				tmp += @coefficients[j - 1][k] * kernels[k]
			end
			decisions[d] = tmp + @intercepts[d]
			d = d + 1
		end
	end

	votes = Array.new(@intercepts.length, 0)
	d = 0
	for i in 0 ... @nRows
		for j in i + 1 ... @nRows
			votes[d] = decisions[d] > 0 ? i : j
			d = d + 1
		end
	end

	amounts = Array.new(@nClasses, 0)
	for i in 0 ... votes.length
		amounts[votes[i]] += 1
	end

	classVal = -1
	classIdx = -1
	for i in 0 ... amounts.length
		if amounts[i] > classVal
			classVal = amounts[i]
			classIdx = i
		end
	end
	return @classes[classIdx]

end