This is extremely broad, but here are a few things to consider.
There are two major types of classification algorithms: supervised and unsupervised. You are using a supervised method (i.e. you are training the model using polygons that contain pixels with the features that you want to detect.) Overall, supervised classification is better than unsupervised, but only if you provide robust training data for the algorithm. Using the semiautomatic classification plugin, you can test multiple algorithms (i.e. minimum distance, maximum likelihood, etc..) using the same set of training data, then compare them to see what works best. https://fromgistors.blogspot.com/p/semi-automatic-classification-plugin.html
Introduce as many layers of training data as possible using your input rasters. If these are multispectral data (contain nearIR bands), you can use raster algebra to compute vegetation indices such as NDVI or GNDVI, then include those new layers in your classification.
Make sure that your training pixels are a representative sample of your target features. You should make as many polygons as you can while remaining confident that you've only included 'weeds'. Try to select enough different looking weed pixels so that you will capture most of the variation in that landcover type.
"Turn the knobs" once you find something that works well, you can refine it by making fine scale adjustments to the parameters of your classification algorithm. Or, maybe you will find that multiple iterations are necessary in the case that you have more than one distinct type of 'weed'.