title: Improving accuracy of a voice detection algorithm
body: <p>So I have this Mono audio file that contains people talking, talking pauses and then them talking again. While they are talking and while they're not talking, there are children crying in the background from time to time, cars' breaks' squealing, things you hear when you are outside.</p>
  
  <p>My goal is to keep those parts when they are talking and to cut those parts when they are not talking out. It is not necessary to filter the background noises.</p>
  
  <p>Basically my final goal is to have a cut list like this</p>
  
  <pre><code>Start in seconds, End in seconds
  </code></pre>
  
  <p>What have I tried?</p>
  
  <ol>
  <li>I manually created a voice only file by fitting together all of those parts that contain speech.(10 seconds)</li>
  <li>I manually created a noise only file by fitting together all of those parts that do not contain speech.(50 seconds)</li>
  <li>I got the frequencies + amplitudes thereof by applying a Fast Fourier transform</li>
  <li>I walk through the audio file each 100 ms and take a FFT snapshot</li>
  <li>I put all values of one snapshot(in my case 512) in a List and feed it to a machine learning algorithm(numl) combined with a label (in the first case voice = true and in the second case voice = false)</li>
  <li>Then I use my main audio file, do basically the same but this time use the result of my machine learning model to determine whether it is speech or not and output the time in seconds it realizes this.</li>
  </ol>
  
  <p>My problem is that I get a lot of false positives and false negatives. It seems to recognize voice when there is none and vice versa.</p>
  
  <p>Is the reason for this probably a badly trained model(I use a decision tree) or do I need to take other measures to get a better result?</p>