Preheat oven to 350°F (180°C). Break cauliflower into florets and spread across 2 trays. Drizzle with 4 tablespoons oil, season with salt, and toss. Roast 30–40 minutes, stirring once, until tender and golden. If browning too quickly, cover loosely with foil.
Cook the onion base: Heat 1 tablespoon oil in a large pan over medium heat. Add onions and cook 8 minutes until softened and lightly colored. Stir in garlic and ginger, cooking 2 minutes more.
Add the spices: Sprinkle in cardamom, cumin, coriander, garam masala, black pepper, and a pinch of salt. Stir 1–2 minutes until fragrant.
Make the sauce: Lower the heat. Stir in ground almonds, then pour in 1 cup milk. Simmer gently for 10 minutes, stirring occasionally. Turn off heat, then stir in yogurt until smooth. Adjust seasoning.
Combine cauliflower and sauce: Add roasted cauliflower to the pan and coat in the sauce. If needed, add a splash more milk to loosen.
Toast raisins and almonds: In a small pan, heat raisins for 2–3 minutes until puffed and darkened. Stir in flaked almonds and toast 1 minute. Remove from heat.
Serve: Transfer curry to a dish. Scatter raisins and almonds on top. Serve hot with rice or chapattis.